HashMap的使用LinkedList的内部(HashMap uses LinkedList in

2019-08-19 02:25发布

public V get(Object key) {
if (key == null)
    return getForNullKey();
    int hash = hash(key.hashCode());
    for (Entry<K,V> 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 ,首先它会搜索通过基于哈希码/散列值,然后遍历散列桶LinkedList在hashbucket(假设DIFF对象具有相同的散列码,从而相同的散列桶)。

但看上面的代码后,我无法理解,当它通过LinekedList迭代(何为LinkedList的)

Answer 1:

的链表,有效。 该table数组的数组Entry元素,每个Entry是一个链表中,每个条目都知道在列表中的下一个,直到你到达终点时, next参考是空的。 该for循环您已经证明在链表迭代。

这不是一个LinkedList如在java.util.LinkedList -这是一个独立的(简单)的实施只是地图。



Answer 2:

它使用链表,而不是java.util.LinkedList类。

基本上e.next是你正在寻找的东西。 每个条目必须在桶旁条目的引用 - 这是一个链表实现。



Answer 3:

e.next是你在找什么。 每个条目必须在桶下一个条目的引用; 这是一个链表实现。



Answer 4:

水桶链表。
表是存储在数组的一个元素的第一条目(链表)的地址的数组。
说在表阵列POSITION0,两个入口对象需要被存储然后表[0]将存储取值范(链表)和取值范的地址将存储ENTRY2的地址。 对于循环有助于通过这些入口对象迭代。
table[0] --> entry1 --> entry2 --> null // Hence output is entry2 of get().

但由于Java的8,世界已经改变树是用来存储条目对象。



文章来源: HashMap uses LinkedList internally
标签: java hashmap