Java的hashSet处理具有相同哈希码的多个项目

标签 java hashset hashcode

我在任何地方都找不到这个问题的答案。 我将 100,000 个具有相同哈希码的不同字符串添加到 java 中的 HashSet 中,花费了 63 毫秒。 (链接列表花费了 37373 毫秒)

我想知道Java的hashSet如何处理这种情况。

(这是练习的一部分,我的实现花费了更长的时间 - 两个“开放”实现 - 将字符串添加到链接列表中,以及“关闭”实现 - 我找到下一个带有给定公式)。

最佳答案

在 OpenJDK HashMaps 和 HashSets 中,如果按哈希存储桶中有太多项目,则回退到 TreeMap/TreeSet:

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java#l145

也不要与 LinkedList 进行比较,而是与 ArrayList 进行比较 - LinkedList 速度较慢并且几乎从未使用/有用。

关于Java的hashSet处理具有相同哈希码的多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50204214/

相关文章:

java - 为什么(我的)Java 比 C++ 快 25 倍?

java - 生成某些数字范围的所有排列的序列第二部分

c# - 如何强制 HashSet 重新散列成员?

c# - C# 中的 GetHashCode 指南

java - 在复合对象的 HashMap 中找不到键

java - 如何在单元测试中调用注入(inject)参数的方法?

java - Java 中的替代 NSSortDescriptor 是什么?

Java - 如何知道HashSet已经被淘汰了?

java - 如何从 String.hashCode() 值获取字符串?

java - 其他库的 Scalaz 类型类实例汇总