LinkedHashMap 能记录下放入元素的顺序,并保证取出的时候顺序保持不变。那为什么LinkedHashMap能保证有序了?
关键在LinkedHashMap的Node 节点上。LinkedHashMap 继承自HashMap 并且实现了Map接口。
/**
* 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);
}
}
可以看到LinkedHashMap.Entry 继承自HashMap.Node 除了Node 本身有的几个属性外,额外增加了before after 用于指向前一个Entry 后一个Entry。也就是说,元素之间维持着一条总的链表数据结构。正式因为这个链表才保证了LinkedHashMap的有序性。