在Java Hashmap中,“tail traversing”是什么意思?Java会反转有多个元素的(链表)桶。这种反转操作是为了避免“tail traversing”以及将元素添加到头部。我无法理解这个概念。
在Java Hashmap中,“tail traversing”是什么意思?Java会反转有多个元素的(链表)桶。这种反转操作是为了避免“tail traversing”以及将元素添加到头部。我无法理解这个概念。
回答Sufian的问题。是的,对于遍历,我们需要遍历整个链表。但是这个线程仅与哈希冲突解决有关。解决哈希冲突的方法之一是重新构造存储在桶中的整个链表。因此,哈希映射从旧链表创建一个新的链表。而这种尾部遍历仅在重建期间发生。
Philiph在上面的回答中解释了什么是尾部遍历以及为什么会发生反转。在Java HashMap中,当元素被插入时,它会进行尾部遍历,以通过对每个单独元素执行equals()操作来检查链接列表中是否存在重复项。我看到很多人主张在HashMap中添加元素时将其添加到头部具有优势,但如果您已经进行了尾部遍历,那么为什么不在找不到匹配项并且从尾部击中空链接时将其添加到尾部呢?对我来说,在头部添加元素没有任何优势,因为它需要进行尾部遍历以检查键是否已经存在。因此,我认为仅将元素添加到头部的唯一原因是像Philiph所提到的那样的时间局部性。这是否会影响到它被添加到头部?因为您访问最后插入的元素是不确定的。
HashMap
中,即使特定索引处存在链接列表以检查键是否匹配,我们仍然需要遍历该链表。for (Entry<K,V> e = table[i]; e != null; e = e.next) {
......................
}
Hashmap
的实现? - Ted Hopp