HashMap在内部使用LinkedList

public V get(Object key) { if (key == null) return getForNullKey(); int hash = hash(key.hashCode()); for (Entry e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value; } return null; } 

我所知道的是,如果你想从HashMap获取一个对象,首先它会根据哈希码/哈希值搜索哈希桶,然后遍历hashbucket中的LinkedList (假设diff对象具有相同的哈希码,因此在相同的哈希桶)。

但在查看上面的代码之后,我无法理解何时迭代LinekedList(以及LinkedList在哪里)

存储桶有效的链表。 table数组是一个Entry元素数组,每个Entry都是一个链表,因为每个条目都知道列表中的下一个条目,直到next引用为空时到达结尾。 您显示的for循环遍历链表。

它不像java.util.LinkedListLinkedList – 它是一个单独的(更简单的)实现,仅适用于地图。

它确实使用链表,但不使用java.util.LinkedList类。

基本上e.next是你正在寻找的东西。 每个条目都引用了桶中的下一个条目 – 它是一个链表实现。

e.next就是你要找的。 每个条目都引用桶中的下一个条目; 这是一个链表实现。

存储桶是链表。
table是一个数组,它存储数组元素的第一个条目(linkedlist)的地址。
比如表数组中的position0,需要存储两个条目对象,然后table [0]将存储entry1(linkedlist)的地址,entry1将存储entry2的地址。 For循环有助于迭代这些条目对象。
table[0] --> entry1 --> entry2 --> null // Hence output is entry2 of get().

但是自从Java 8以来,世界已经发生了变化,因为树被用来存储入口对象。