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的有序性。
本文深入探讨了LinkedHashMap如何保持元素插入顺序不变的秘密。通过分析其内部Entry节点的设计,揭示了利用双向链表结构实现这一特性的原理。
1636

被折叠的 条评论
为什么被折叠?



