Java有序的Map LinkedHashMap用法详解
作者:野猿新一
LinkedHashMap
1.定义:
LinkedHashMap是HashMap和双向链表的合二为一,即一个将所有Entry节点链入一个双向链表的HashMap(LinkedHashMap = HashMap + 双向链表)
LinkedHashMap和HashMap是Java Collection Framework 的重要成员,也是Map族(如下图所示)
LinkedHashMap是HashMap的子类(拥有HashMap的所有特性)
LinkedHashMap和HashMap最多只允许一条Entry的键为Null(多条会覆盖),但允许多条Entry的值为Null
LinkedHashMap 也是 Map 的一个非同步的实现
LinkedHashMap很好的支持LRU算法
HashMap是无序的,LinkedHashMap通过维护一个额外的双向链表保证了迭代顺序
迭代顺序可以是插入顺序,也可以是访问顺序(即根据链表中元素的顺序可以将LinkedHashMap分为:保持插入顺序的LinkedHashMap和保持访问顺序的LinkedHashMap,其中LinkedHashMap的默认实现是按插入顺序排序的)
LinkedHashMap简介
LinkedHashMap是Java提供的一个集合类,它继承自HashMap,并在HashMap基础上维护一条双向链表,使得具备如下特性:
支持遍历时会按照插入顺序有序进行迭代。
支持按照元素访问顺序排序,适用于封装LRU缓存工具。
因为内部使用双向链表维护各个节点,所以遍历时的效率和元素个数成正比,相较于和容量成正比的HashMap来说,迭代效率会高很多。
LinkedHashMap逻辑结构如下图所示,它是在HashMap基础上在各个节点之间维护一条双向链表,使得原本散列在不同bucket上的节点、链表、红黑树有序关联起来。
下面看下java 有序的Map LinkedHashMap简介,内容如下所示:
无序的HashMap
我们知道HashMap是无需的,数据并不是按我们插入的顺序排序的,我们可以验证下
public class Test6 { public static void main(String[] args) { Map<String, String> hashMap = new HashMap<String, String>(); hashMap.put("name1", "value1"); hashMap.put("name2", "value2"); hashMap.put("name3", "value3"); Set<Entry<String, String>> set = hashMap.entrySet(); Iterator<Entry<String, String>> iterator = set.iterator(); while(iterator.hasNext()) { Entry<String, String> entry = iterator.next(); String key = (String) entry.getKey(); String value = (String) entry.getValue(); System.out.println("key:" + key + ", value:" + value); } } }
可以看到输出结果并不是按数据插入的顺序的
key:name3, value:value3
key:name2, value:value2
key:name1, value:value1
有序的LinkedHashMap
要想实现有序的Map,我们可以用LinkedHashMap,下面验证一下,把原来代码的HashMap替换成LinkedHashMap
public class Test6 { public static void main(String[] args) { Map<String, String> hashMap = new LinkedHashMap<String, String>(); hashMap.put("name1", "value1"); hashMap.put("name2", "value2"); hashMap.put("name3", "value3"); Set<Entry<String, String>> set = hashMap.entrySet(); Iterator<Entry<String, String>> iterator = set.iterator(); while(iterator.hasNext()) { Entry<String, String> entry = iterator.next(); String key = (String) entry.getKey(); String value = (String) entry.getValue(); System.out.println("key:" + key + ", value:" + value); } } }
可以看到输出结果为我们插入的顺序
key:name1, value:value1
key:name2, value:value2
key:name3, value:value3
到此这篇关于java 有序的Map LinkedHashMap简介的文章就介绍到这了,更多相关java Map LinkedHashMap内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!