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

lin*_*ing 8 java eclipse debugging hashtable

在此输入图像描述我在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中遇到这种奇怪的观察.

知道发生了什么事吗?谢谢.

Kum*_*nav 9

出现上述情况是因为HashTable表数组以形式存储键值对Map$Entry.如果两个键使用Object hashcode() and the underlying Collection's hashing algorithm它们散列到同一个桶中 ,它们将使用每个Map $ Entry Object中存在的下一个引用单链接列表的形式放入同一个桶(比如table [j]). Thus.each table index包含一个Map$EntryObject,它引用了具有相同hashbucket的下一个 Map$Entry Object(但是根据Key对象的方法,它的键是不相等的equals()).事实是,根据Key的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
Run Code Online (Sandbox Code Playgroud)

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

  • +1好一个,`int index =(hash&0x7FFFFFFF)%tab.length;`这是我们调用put on hashtable时发生的事情. (2认同)