一 特性
- 是双向链表,使用链表记录的插入的顺序也可以使用访问顺序,有个构造方法的参数accessOrder 是使用访问顺序的,会将访问过的节点放到队尾,
- 可以用来实现LRU算法
- 是有序的,遍历输出顺序和put的顺序一致,注意按照访问顺序输出,被访问过的entity会被链接到尾部
- 非同步的,并且支持null键和值
- 继承hashMap,部分特性和hashMap一样,比如hash方法,部分方法使用hashMap
二 属性
```java //头结点 transient LinkedHashMap.Entryhead;
//尾结点
transient LinkedHashMap.Entry
<a name="wzZD3"></a># 四 添加```java//在调用hashMap的添加方法之后调用这个 将节点记录到链表上void afterNodeInsertion(boolean evict) { // possibly remove eldestLinkedHashMap.Entry<K,V> first;if (evict && (first = head) != null && removeEldestEntry(first)) {K key = first.key;removeNode(hash(key), key, null, false, true);}}
五 删除
//同样是调用hashMap的删除方法之后,结尾调用了这个方法在链表上删除对应的节点void afterNodeRemoval(Node<K,V> e) { // unlinkLinkedHashMap.Entry<K,V> p =(LinkedHashMap.Entry<K,V>)e, b = p.before, a = p.after;p.before = p.after = null;if (b == null)head = a;elseb.after = a;if (a == null)tail = b;elsea.before = b;}
六 获取
public V get(Object key) {Node<K,V> e;//调用hashMap的get方法if ((e = getNode(hash(key), key)) == null)return null;if (accessOrder)afterNodeAccess(e);return e.value;}
