LinkedHashMap
来源:互联网 发布:js添加节点 编辑:程序博客网 时间:2024/05/22 17:26
LinkedHashMap使用双向循环链表链接所有的Entry元素。
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
LinkedHashMap是在HashMap的基本上进行实现。它与HashMap最大的不同是,类中有一个头节点变量private transient Entry<K,V> header和具有前驱和后继节点的Entry。
private static class Entry<K,V> extends HashMap.Entry<K,V> { // These fields comprise the doubly linked list used for iteration. <span style="color:#ff0000;">Entry<K,V> before, after;</span>Entry(int hash, K key, V value, HashMap.Entry<K,V> next) { super(hash, key, value, next); } /** * Removes this entry from the linked list. */ private void remove() { before.after = after; after.before = before; } /** * Inserts this entry before the specified existing entry in the list. */ private void addBefore(Entry<K,V> existingEntry) { after = existingEntry; before = existingEntry.before; before.after = this; after.before = this; } /** * This method is invoked by the superclass whenever the value * of a pre-existing entry is read by Map.get or modified by Map.set. * If the enclosing Map is access-ordered, it moves the entry * to the end of the list; otherwise, it does nothing. */ void recordAccess(HashMap<K,V> m) { LinkedHashMap<K,V> lm = (LinkedHashMap<K,V>)m; if (lm.accessOrder) { lm.modCount++; remove(); addBefore(lm.header); } } void recordRemoval(HashMap<K,V> m) { remove(); } }
重写了父类中的init()方法,来初始化header节点。
添加元素时,比HashMap多一步操作,即同时把改元素添加到双向循环链表。
void createEntry(int hash, K key, V value, int bucketIndex) { HashMap.Entry<K,V> old = table[bucketIndex];Entry<K,V> e = new Entry<K,V>(hash, key, value, old); table[bucketIndex] = e; <span style="color:#ff0000;"> e.addBefore(header);</span> size++; }
0 0
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- LinkedHashMap
- 最长公共子序列LCS递归解法
- android camera(一):camera模组CMM介绍
- 阶乘数最右边一个非零数字:通用解法
- 把iptables移植到嵌入式Linux系统
- ORACLE定时任务个人使用记录(job)
- LinkedHashMap
- 热编译工具fswatch
- Nginx+Tomcat+Memcached集群Session共享
- 大数据的显示
- Mac下vim插件taglist的一个小问题
- qt 线程更新UI界面
- LVS快速搭建教程
- 数据库安装时的log路径
- Error tips:array type has incomplete element type