java – 用于哈希码的桶查找的算法

参见英文答案 > What hashing function does Java use to implement Hashtable class?                                    5个
在大多数情况下,HashSet具有查找复杂度O(1).我知道这是因为对象保存在与对象的哈希码相对应的桶中.

查找完成后,它直接进入存储桶并查找(使用等于多个对象存在于同一存储桶中的元素).

我一直在想,它是如何直接进入所需的桶的?哪个算法用于存储桶查找?这对总查找时间没有任何影响吗?

解决方法

从内存:HashSet实际上由HashMap支持,基本的查找过程是:

>拿到钥匙
>哈希(hashcode())
> hashcode%桶的数量
>转到那个桶并评估equals()

对于Set,只有唯一的元素.我建议阅读HashSet的源代码,它应该能够回答你的问题.

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java#HashMap.containsKey%28java.lang.Object%29

另请注意,Java 8代码已更新,此解释涵盖了Java 8之前的代码库.我没有详细检查Java 8实现,只是发现它不同.

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...