java - "the hash table is open"在Java中是什么意思?

标签 java hashtable hash-collision

我在阅读有关 Hashtable 类的 Java api 文档时遇到了几个问题。在文档中,它说“ Note that the hash table is open: in the case of a "hash collision", a single bucket stores multiple entries, which must be searched sequentially. ”我自己尝试了以下代码

Hashtable<String, Integer> me = new Hashtable<String, Integer>();
me.put("one", new Integer(1));
me.put("two", new Integer(2));
me.put("two", new Integer(3));
System.out.println(me.get("one"));  
System.out.println(me.get("two"));

输出是

1
3
  1. 这就是“开放”的意思吗?
  2. Integer 2 怎么了?作为垃圾收集?
  3. 有没有“封闭”的例子?

最佳答案

不,这不是“开放”的意思。

注意key 冲突和hash 冲突的区别。

哈希表不允许多个条目具有相同的(如在您的示例中,您放置了两个键为“two”的条目,第二个 (3) 替换了第一个(2),哈希表中只剩下第二个)。

哈希 冲突是指两个不同的键具有相同的哈希码(由它们的 hashCode() 方法返回)。不同的哈希表实现可以以不同的方式处理这个问题,主要是在低级实现方面。作为“开放的”,Hashtable 将存储条目的链接列表,这些条目的键散列为相同的值。在最坏的情况下,这可能会导致简单操作的 O(N) 性能,在散列映射中通常是 O(1),其中散列主要是不同的值。

关于java - "the hash table is open"在Java中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288692/

相关文章:

c# - 在哈希表中插入两次相同的键,这怎么可能?

java - 如何用java编写监控软件

java - 为什么 java.util.Hashtable 在 Netbeans 8 中标记为 'obsolete collection'?

java - HashTable中的排序问题

hash - 子字符串 md5 碰撞

git - Git 将如何处理 blob 上的 SHA-1 冲突?

java - 在 Java 1.7 中第一次对 TreeSet 进行 add 调用时触发了compareTo

java - 如何将网络浏览器转换为代号一的本地镜像?

java - 发送到 HTTPS url 的 java 请求是否完全安全?

sql-server - 如何附加到powershell哈希表值?