共同学习Java源代码-数据结构-LinkedHashMap(三)

来源:互联网 发布:淘宝卖特产没证可以吗 编辑:程序博客网 时间:2024/06/05 20:29
    public LinkedHashMap(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor);
        accessOrder = false;

    }


    public LinkedHashMap(int initialCapacity) {
        super(initialCapacity);
        accessOrder = false;
    }


    public LinkedHashMap() {
        super();
        accessOrder = false;
    }


    public LinkedHashMap(Map<? extends K, ? extends V> m) {
        super();
        accessOrder = false;
        putMapEntries(m, false);
    }


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

这几个都是构造方法 不多说了

    public boolean containsValue(Object value) {
        for (LinkedHashMap.Entry<K,V> e = head; e != null; e = e.after) {
            V v = e.value;
            if (v == value || (value != null && value.equals(v)))
                return true;
        }
        return false;
    }

这个方法是判断是否包含值的方法 就是从head元素开始遍历 具体很简单就不说了


    public V get(Object key) {
        Node<K,V> e;
        if ((e = getNode(hash(key), key)) == null)
            return null;
        if (accessOrder)
            afterNodeAccess(e);
        return e.value;
    }


    public V getOrDefault(Object key, V defaultValue) {
       Node<K,V> e;
       if ((e = getNode(hash(key), key)) == null)
           return defaultValue;
       if (accessOrder)
           afterNodeAccess(e);
       return e.value;
   }

这两个是获取值的方法 和父类不同的地方在于增加了afterNodeAccess的逻辑 就是accessOrder为true 对节点操作了一次 就将节点放到链表尾部 也就是按照操作顺序排列元素


    public void clear() {
        super.clear();
        head = tail = null;
    }

这个是清除的方法 调用了父类的方法 并将head和tail都清空


    protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        return false;
    }

这个是删除最古老的元素的方法 直接返回false



阅读全文
0 0