您的位置:首页 > 理论基础 > 数据结构算法

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

2017-12-12 16:36 357 查看
    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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: