LinkedHashMap

 本质上,HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表双向链表的HashMap。在LinkedHashMapMap中,所有put进来的Entry都保存在如下面第一个图所示的哈希表中,但由于它又额外定义了一个以head为头结点的双向链表(如下面第二个图所示),因此对于每次put进来Entry,除了将其保存到哈希表中对应的位置上之外,还会将其插入到双向链表的尾部。

LinkedHashMap_第1张图片


LinkedHashMap_第2张图片

4、基本元素 Entry

LinkedHashMap采用的hash算法和HashMap相同,但是它重新定义了Entry。LinkedHashMap中的Entry增加了两个指针 before 和 after,它们分别用于维护双向链接列表。特别需要注意的是,next用于维护HashMap各个桶中Entry的连接顺序,before、after用于维护Entry插入的先后顺序的,源代码如下:

privatestaticclassEntryextendsHashMap.Entry {// These fields comprise the doubly linked list used for iteration.Entry before, after;    Entry(inthash, K key, V value, HashMap.Entry next) {super(hash, key, value, next);    }    ...}

private static classEntryextendsHashMap.Entry { // These fields comprise the doubly linked list used for iteration. Entry before, after;

    Entry(int hash, K key, V value, HashMap.Entry next) {

        super(hash, key, value, next);

    }

    ...

}

形象地,HashMap与LinkedHashMap的Entry结构示意图如下图所示:

LinkedHashMap_第3张图片

http://blog.csdn.net/justloveyou_/article/details/71713781

你可能感兴趣的:(LinkedHashMap)