Java集合容器之LinkedHashMap

1.继承关系

1
2
3
4
5
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V> {
...
}

LinkedHashMap是HashMap的子类,从面向对象设计思想上讲,LinkedHashMap更多的是增加或改写HashMap的方法。

2.Entry类

1
2
3
4
5
6
static class LinkedHashMapEntry<K,V> extends HashMap.Node<K,V> {
LinkedHashMapEntry<K,V> before, after;
LinkedHashMapEntry(int hash, K key, V value, Node<K,V> next) {
super(hash, key, value, next);
}
}

LinkedHashMapEntry是HashMap.Node的子类,构造方法直接调用父类构造方法,额外加多两个前后引用。

  • next引用是提供给父类HashMap.Node构建HashMap的单链表的!
  • before, after是构建一个双向回环链表!
  • 两者并无关联,也不冲突!

3.图像理解数据结构

  • 上一节提及到,双链表和HashMap并不冲突,所以HashMap部分可以参考HashMap。
  • 以下为双向回环链表部分。
    双向回环链表

4.与HashMap比较

  • 遍历集合时,LinkedHashMap保留元素进入顺序,HashMap则无法保证元素进入顺序。当然要耗费一点性能。
  • LinkedHashMap每次都将元素加入至双向链表的尾部,利用这个特性实现LruCache,并不是因为LruCache的需要而实现了LinkedHashMap。

5.参考资料

http://www.cnblogs.com/xrq730/p/5052323.html