我在阅读有关 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
- 这就是“开放”的意思吗?
- Integer 2 怎么了?作为垃圾收集?
- 有没有“封闭”的例子?
最佳答案
不,这不是“开放”的意思。
注意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/