程序员社区

jdk LinkedHashMap源码分析

一、前言

HashMap存在着一个问题,那就是它的迭代顺序不是它的存储顺序,即HashMap中的元素是无序的。但是有些场景下,我们需要使用一个有序的map。这种情况下,我们就可以使用LinkedHashMap,它虽然增加了时间可空间上的开销,但是通过维护一个运行于所有条目的双向链表,LinkedHashMap保证了元素的迭代顺序。

二、属性

2.1 Entry

可以看出在LinkedHashMap中增加了before和after用于维护双向链表。

/**
     * HashMap.Node subclass for normal LinkedHashMap entries.
     */
    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);
        }
    }

参考

赞(0) 打赏
未经允许不得转载:IDEA激活码 » jdk LinkedHashMap源码分析

一个分享Java & Python知识的社区