hashcode

散列表与hash函数

纵饮孤独 提交于 2019-12-09 22:25:40
散列表: hash冲突解决 1)开放定址法 : 存入:冲突的 进行二次处理,加线性,平方等;以线性为例,会逐个向下找,直到找到一个空的位置然后放进去 查找:与存入相似,先hash定位起始的查找位置,然后向下找等于的对象,如果遇到空的说明不存在 删除:因为上面查找遇空则说明不存在,所以不可以直接删除,仅仅可以标记删除 2)链表: 3)再hash:产生冲突时,计算另一个哈希函数地址,到不冲突为止。使用一组散列函数 hash1(key),hash2(key),hash3(key)……我们先用第一个散列函数,如果计算得到的存储位置已经被占用,再用第二个散列函数,依次类推,直到找到空闲的存储位置。 4)公共溢出区:把溢出的放到一起 装载因子=填入表中的元素个数/散列表的长度 假设我们有 10万条URL 访问日志次数表,如何按照访问次数给 URL 排序? 1:保存次数 遍历 10 万条数据,以 URL 为 key,访问次数为 value,存入散列表,同时记录下访问次数的最大值 K,时间复杂度 O(N)。 k不大可以使用桶排序,否则快排 有两个字符串数组,每个数组大约有 10 万条字符串,如何快速找出两个数组中相同的字符串? 一个用来查,一个用来插入 以第一个字符串数组构建散列表,key 为字符串,value 为出现次数。再遍历第二个字符串数组,以字符串为 key 在散列表中查找,如果

Set集合

可紊 提交于 2019-12-09 21:50:36
文章目录 Set简述 1 HashSet 1.1不多比比,先看源码 **结论:HashSet是HashMap的一个实例。set的底层就是hashMap,所有的操作都是基于map的操作。** 1.2HashSet的存储过程 简述 **二叉树简介笔记** 扩展:加载因子 存储过程: 1.3HashSet存储的自定义类 去除重复值 重写hashCode()为什么prime是31? 2TreeSet 2.1TreeSet简述: ① TreeSet 底层 是基于TreeMap的`红黑树`的实现。 **②无序,不可重复, 可排序 ** 2.2问题 问题1:TreeSet为什么是无序的? 问题2:那么他的自然排序是怎么实现的呢? 排序方法1 使用无参构造方法TreeSet() 自定义类实现Comparable接口,并实现compareTo(T o)方法 排序方法2:使用构造方法TreeSet(Comparator<? super E> comparator) 创建Comparator接口的实现类,并实现compare(),传该实现类对象给构造方法 重写compareTo() 注意: 3LinkedHashSet HashSet的子类。该集合底层是哈希表与双向链表组成,插入与存储顺序相同。 有序不重复 遍历集合 Set简述 特点:不重复,无序(插入和存储顺序不同),只允许存在一个null

Different fields for equals and hashcode

蹲街弑〆低调 提交于 2019-12-09 20:46:02
问题 I agree with the statement from this post What issues should be considered when overriding equals and hashCode in Java? Use the same set of fields that you use to compute equals() to compute hashCode(). But i've some doubts : Is this absolutely necessary to have same fields ? If yes, what if I don't use same field ? Will it affect HashMap performance or HashMap Accuracy ? 回答1: The fields don't have to be the same. The requirement is for two objects that are equal, they must have the same hash

what must be hashcode of null objects in Java?

时光总嘲笑我的痴心妄想 提交于 2019-12-09 15:51:59
问题 According to a comment from this post, hascode of null objects can throw NPE or a value of zero . This is implementation specific. but within the same implementation, why does Objects.hashcode and hascode(instance) return different values. for ex: public class EqualsTesting { public static void main(String[] args){ String p1 =null; String p2 = null; System.out.println(Objects.hashCode(p1)); System.out.println(p2.hashCode()); } } Output: 0 Exception in thread "main" java.lang

java源码解析之Object类

我怕爱的太早我们不能终老 提交于 2019-12-09 13:59:04
一、Object类概述   Object类是java中类层次的根,是所有类的基类。在编译时会自动导入。Object中的方法如下: 二、方法详解   Object的方法可以分成两类,一类是被关键字 final 修饰的的方法,这类方法能被子类覆盖。另一类是没有 final 修饰,它们可以被子类重写。 构造方法:Object()   在Object中没有显式的构造方法,这个只是创建一个Object对象,没有什么可以说的。 getClass()   getClass被 final 修饰,不能被子类重写。它返回的是正在运行的对象的Class对象。并且本方法被 native 修饰,其具体实现是在本地C(C++)方法。应为java无法与一些底层系统直接交互,这个时候就可以通过native方法通过非java语言间接交互。想更多的了解 native 可以参考这篇文章 (了解native) ,你也可以自己在java中通过native调用c写的方法 (看这里) 。 equals(Object obj)   表明 obj 是否“equals to”本对象。在Object中的equals返回的是两个对象是否相同(指两个对象是同一个对象) public boolean equals(Object obj) { return (this == obj); } 如果我们要实现本对象上逻辑相等的概念时

Example of ==, equals and hashcode in java

落爺英雄遲暮 提交于 2019-12-09 13:04:50
问题 Given this: String s1= new String("abc"); String s2= new String("abc"); String s3 ="abc"; System.out.println(s1==s3); System.out.println(s1==s2); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); System.out.println(s3.hashCode()); Output is: false false true true 96354 96354 96354 Here == is giving false for each object but the hashcode for each String object is same. Why is it so? 回答1: == does compare

java基础--(8)--for与增强for,java8 foreach比较

半世苍凉 提交于 2019-12-09 06:13:13
结论,效率: java8的foreach > 增强for > 普通for循环 如果你不信,请往下看。 今天在一个技术群中看到了一下讨论,有同学说“慎用java8的foreach循环”,并且给出了很多博客的截图和链接,其中有一位博主的博客测试方法写了很多。 链接如下: http://www.cnblogs.com/yiwangzhibujian/p/6919435.html 他最后的结论: http://www.cnblogs.com/yiwangzhibujian/p/6965114.html 的确,如果你在百度上搜索java for foreach java8 等关键词会出现很多的搜索结果,比如这几个循环效率的对比。并且很多博主的结论是java8的foreach循环是真的菜,效率不是差的一点点!!!慎用,之类的。 我的思考:若java8的foreach效率如此低下,为何还要推出?难道jdk的开发人员不会优化一下? 带着这个思考,我仔细看了“已往之不谏”的博主最后为java8 正名的博客,写的不错,测试也很充分(说实话,没有仔细的阅读)但是结论很明显。java8胜了。作者为了证明java8不是吃素的,确实下了不少功夫。 最后的最后,作者提到了, java8的foreach预热是jvm级别的,需要预热。 针对这一点,我想是不是能对作者的第一篇博客的测试方式进行一下改进?

SpringMVC在Controller层中注入request的坑

瘦欲@ 提交于 2019-12-09 02:37:53
摘要: 记一次为了节省代码没有在方法体中声明HttpServletRequest,而用autowire直接注入所钻的坑 结论 给心急的人。 直接在Controller的成员变量上使用@Autowire声明HttpServletRequest,这是线程安全的! @Controller public class TestController{ @Autowire HttpServletRequest request; @RequestMapping("/") public void test(){ request.getAttribute("uid"); } } 结论如上。 背景 是这样的,由于项目中我在Request的头部加入身份验证信息,而我在拦截器截获信息并且验证通过后,会将当前用户的身份加到request的Attribute中,方便在Controller层拿出来复用。 疑问:为什么不直接在Controller上使用@RequestHeader取出来呢? 因为header里面是加密后的数据,且要经过一些复杂的身份验证判断,所以直接将这一步直接丢在了拦截器执行。 所以当解密后,我将用户信息(如uid)用 request.setAttribute() 设入request中在Controller提取。 而如果需要使用request,一般需要在方法上声明,如: public Result

IEqualityComparer<double> with a tolerance; how to implement GetHashCode?

痞子三分冷 提交于 2019-12-08 18:51:02
问题 I'm implementing a reusable DoubleEqualityComparer (with a custom tolerance: the "epsilon" constructor parameter) to ease the usage of LINQ with sequences of double. For example: bool myDoubleFound = doubles.Contains(myDouble, new DoubleEqualityComparer(epsilon: 0.01)); What is the right way to implement GetHashCode? Here's the code: public class DoubleEqualityComparer : IEqualityComparer<double>, IEqualityComparer<double?> { private readonly double epsilon; public DoubleEqualityComparer

Java Hashtable .containsKey(String key) is returning true even when the strings and hashcodes are different… How?

↘锁芯ラ 提交于 2019-12-08 14:05:37
I'm currently having some issues with my Hashtable in java, where FEightPuzzle is a class which I've created. Inside my class I have a String which is storing the key for each instance. Now during my program when I check inside the Hashtable for duplicate instances I sometimes "find" some when really the found ones are different. Take for example when I call bol.containsKey(current.key) where bol is a HT and current is an FEightPuzzle. When this is true I check the values of the keys and they are current.key = "8 14 11 0 6 12 13 1 10 4 5 9 15 2 3 7" bol.get(current.key).key = "12 8 4 0 13 9 5