Eclipse调试器中显示的哈希表值

时间:2014-09-15 22:37:44

标签: java eclipse debugging hashtable

enter image description here我在Eclipse中调试Hashtable并发现了一些奇怪的东西。我的Hashtable变量名是“my_hashTable”,而Eclipse调试器,如果我点击它,它显示它的值是三:{first = 0,third = 2,second = 1},这是正确的,并且计数是3 ,这也是正确的。

但是,如果我单击my_hashTable变量中的“table”变量,它会显示只有两个非空值,[4] = 2且[5] = 0.其完整值如下:

[null,null,null,null,third = 2,first = 0,null]

为什么会这样? “second = 1”对在哪里?这是我第一次在Eclipse中遇到这种奇怪的观察。

知道发生了什么事吗?感谢。

1 个答案:

答案 0 :(得分:9)

上述情况是由HashTable结构引起的,其中表数组以Map$Entry的形式存储键值对。如果两个键散列到同一个桶使用Object hashcode() and the underlying Collection's hashing algorithm,它们将使用每个Map $ Entry Object中存在的下一个引用以单链表的形式放在同一个桶中(比如table [j])。因此,每个表索引包含一个Map$Entry对象,其中引用下一个 Map$Entry具有相同hashbucket的对象(但其键不等,按照密钥对象的equals()方法。问题是密钥根据密钥的equals()方法是不相等的,但它们的桶索引是相同的using the hashcode() and hashing algorithm applied.

只需展开下一个可见的表索引,您就可以找到Map$Entry形式的键值对。

表数组中存储的每个 Map $ Entry 具有以下结构: -

1)key 
2)value
3)hashcode
4)next -contains reference of next Map$Entry

这是基于哈希的集合的工作方式。哈希算法返回相同索引的对象与单个链接列表存储在同一个存储桶(表索引)中。