LinkedHashMap源码解读

LinkedHashMap继承了HashMap,采用双向链表结构,数据顺序是可预知的

 void transfer(HashMap.Entry[] newTable, boolean rehash)

 以及

void addEntry(int hash, K key, V value, int bucketIndex) {
        super.addEntry(hash, key, value, bucketIndex);

        // Remove eldest entry if instructed
        Entry<K,V> eldest = header.after;
        if (removeEldestEntry(eldest)) {
            removeEntryForKey(eldest.key);
        }
    }

void createEntry(int hash, K key, V value, int bucketIndex) {
        HashMap.Entry<K,V> old = table[bucketIndex];
        Entry<K,V> e = new Entry<>(hash, key, value, old);
        table[bucketIndex] = e;
        e.addBefore(header);
        size++;
    }

 来实现双向链表。

取数据时,可以选择是按存放顺序取还是访问顺序取:

 public LinkedHashMap(int initialCapacity,
                         float loadFactor,
                         boolean accessOrder) {
        super(initialCapacity, loadFactor);
        this.accessOrder = accessOrder;
    }

猜你喜欢

转载自arthur2014.iteye.com/blog/2347109