Java中的“哈希表已打开”是什么意思?

derrdji:

我正在阅读有关Hashtable类的Java api文档,并遇到了几个问题。在文档中,它说:“ 请注意,哈希表已打开:在发生“哈希冲突”的情况下,单个存储桶会存储多个条目,必须按顺序搜索这些条目。 ”我自己尝试了以下代码

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. 有没有“封闭”的例子?
阿维:

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

注意冲突和哈希冲突之间的区别

Hashtable不允许使用相同的输入多个条目(例如,在您的示例中,您使用键“ two”放置了两个条目,第二个条目(3)替换了第一个条目(2),而您只剩下了一个) Hashtable中的第二个)。

散列碰撞是当两个不同的密钥具有相同的散列码(由它们的hashCode()方法返回)。不同的哈希表实现可以以不同的方式处理此问题,主要是在低层实现方面。处于“打开”状态时,哈希表将存储条目的链接列表,这些条目的键哈希为相同的值。在最坏的情况下,这可能导致简单操作的O(N)性能,在散列图中哈希通常是不同值的散列图中通常为O(1)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章