美文网首页
Java1.8集合之LinkedHashMap

Java1.8集合之LinkedHashMap

作者: aljg1999 | 来源:发表于2018-02-01 22:25 被阅读0次
  1. LinkedHashMap可以认为是HashMap+LinkedList
  2. LinkedHashMap的基本实现思想就是----多态
  3. LinkedHashMap extends HashMap implements Map
  4. LinkedList是有序的,accessOrder为true每次访问一个元素(get或put),被访问的元素都被提到最后面去了
    //重写hashmap方法(每当新建节点添加先后关系)
    Node<K,V> newNode(int hash, K key, V value, Node<K,V> e) {
        LinkedHashMap.Entry<K,V> p =
            new LinkedHashMap.Entry<K,V>(hash, key, value, e);
        linkNodeLast(p);
        return p;
    }
    //插入最后节点
    private void linkNodeLast(LinkedHashMap.Entry<K,V> p) {
        LinkedHashMap.Entry<K,V> last = tail;
        tail = p;
        if (last == null)
            head = p;
        else {
            p.before = last;
            last.after = p;
        }
    }
    //  节点添加完后
    void afterNodeAccess(Node<K,V> e) { // move node to last
        LinkedHashMap.Entry<K,V> last;
        //是accessorder(lru)则继续(putval执行则当前最后节点,不需重复添加)
        if (accessOrder && (last = tail) != e) {
            LinkedHashMap.Entry<K,V> p =
                (LinkedHashMap.Entry<K,V>)e, b = p.before, a = p.after;
            p.after = null;
            if (b == null)
                head = a;
            else
                b.after = a;
            if (a != null)
                a.before = b;
            else
                last = b;
            if (last == null)
                head = p;
            else {
                p.before = last;
                last.after = p;
            }
            tail = p;
            ++modCount;
        }
    }
    //本身初始结构,其他内容继承
    transient LinkedHashMap.Entry<K,V> head;
    transient LinkedHashMap.Entry<K,V> tail;
    //true lru false插入顺序
    final boolean accessOrder;
    
    
    static class Entry<K,V> extends HashMap.Node<K,V> {
    Entry<K,V> before, after;
    Entry(int hash, K key, V value, Node<K,V> next) {
            super(hash, key, value, next);
        }
    }

Entry<K,V>继承hashmap真实属性如下:

  • K key
  • V value
  • Entry<K, V> next
  • int hash
  • Entry<K, V> before
  • Entry<K, V> after

https://www.cnblogs.com/xiaoxi/p/6170590.html

相关文章

网友评论

      本文标题:Java1.8集合之LinkedHashMap

      本文链接:https://www.haomeiwen.com/subject/fdijzxtx.html