Java 的 ConcurrentHashMap 中的哈希冲突:必须采取哪些预防措施?
Hash collisions in Java's ConcurrentHashMap: which precautions must be taken?
我在理解 Java 的 ConcurrentHashMap 如何处理散列(或者更确切地说:散列冲突)时遇到一些问题。
例如,当我 运行 每个人时:
"Ea".hashCode()
"FB".hashCode()
...我两次收到相同的整数:2236
现在,如果我使用这些字符串中的每一个作为 ConcurrentHashMap 实例中的键,似乎没有问题。
ConcurrentHashMap<String, Object> testMap = new ConcurrentHashMap<>();
testMap.put("Ea", Math.random());
System.out.println(testMap.containsKey("FB"));
最后一行 returns false
,尽管映射中已经存在具有相同哈希码值 ("Ea"
) 的键。
这是如何工作的,更重要的是:我需要采取什么预防措施来防止我的 ConcurrentHashMap 实例中的哈希冲突?
Javas ConcurrentHashMap 使用哈希表作为底层数据结构来存储条目。 table 处理冲突的方式描述如下:
How do HashTables deal with collisions?
在使用标准库的HashMap 和ConcurrentHashMap 类型时,一般不需要担心哈希冲突。这些保证不会导致具有相同哈希值的键出现问题。
我在理解 Java 的 ConcurrentHashMap 如何处理散列(或者更确切地说:散列冲突)时遇到一些问题。
例如,当我 运行 每个人时:
"Ea".hashCode()
"FB".hashCode()
...我两次收到相同的整数:2236
现在,如果我使用这些字符串中的每一个作为 ConcurrentHashMap 实例中的键,似乎没有问题。
ConcurrentHashMap<String, Object> testMap = new ConcurrentHashMap<>();
testMap.put("Ea", Math.random());
System.out.println(testMap.containsKey("FB"));
最后一行 returns false
,尽管映射中已经存在具有相同哈希码值 ("Ea"
) 的键。
这是如何工作的,更重要的是:我需要采取什么预防措施来防止我的 ConcurrentHashMap 实例中的哈希冲突?
Javas ConcurrentHashMap 使用哈希表作为底层数据结构来存储条目。 table 处理冲突的方式描述如下: How do HashTables deal with collisions?
在使用标准库的HashMap 和ConcurrentHashMap 类型时,一般不需要担心哈希冲突。这些保证不会导致具有相同哈希值的键出现问题。