为什么LinkedHashMap是有序

LinkedHashMap 能记录下放入元素的顺序,并保证取出的时候顺序保持不变。那为什么LinkedHashMap能保证有序了?

关键在LinkedHashMap的Node 节点上。LinkedHashMap 继承自HashMap 并且实现了Map接口。

/**
 * HashMap.Node subclass for normal LinkedHashMap entries.
 */
static class Entry extends HashMap.Node {
    Entry before, after;
    Entry(int hash, K key, V value, Node next) {
        super(hash, key, value, next);
    }
}

可以看到LinkedHashMap.Entry 继承自HashMap.Node 除了Node 本身有的几个属性外,额外增加了before after 用于指向前一个Entry 后一个Entry。也就是说,元素之间维持着一条总的链表数据结构。正式因为这个链表才保证了LinkedHashMap的有序性。

你可能感兴趣的:(JAVA)