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中遇到这种奇怪的观察.
知道发生了什么事吗?谢谢.
出现上述情况是因为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)
这就是基于哈希的集合的工作方式.哈希算法返回相同索引的对象与单个链接列表存储在同一个存储桶(表索引)中.
| 归档时间: |
|
| 查看次数: |
1503 次 |
| 最近记录: |