https://www.cnblogs.com/LiaHon/p/11180869.html
https://zhuanlan.zhihu.com/p/357921917
https://www.cnblogs.com/LiaHon/p/11180869.html
LinkedHashMap的主要结构为HashMap(数组+链表+红黑树)与由 before、after 维护的双向链表组成。
LinkedHashMap在HashMap的基础上,通过添加before、after两个节点属性来实现双向链表
先看一个例子,我们想在页面展示一周内的消费变化情况,用echarts面积图进行展示。如下:
我们在后台将数据构造完成
HashMap<String, Integer> map = new HashMap<>();
map.put("星期一", 40);
map.put("星期二", 43);
map.put("星期三", 35);
map.put("星期四", 55);
map.put("星期五", 45);
map.put("星期六", 35);
map.put("星期日", 30);
然而页面上一展示,发现并非如此,我们打印出来看,发现顺序并非我们所想,先put进去的先get出来
for (Map.Entry<String, Integer> entry : map.entrySet()){
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}
/**
* 结果如下:
* key: 星期二, value: 40
* key: 星期六, value: 35
* key: 星期三, value: 50
* key: 星期四, value: 55
* key: 星期五, value: 45
* key: 星期日, value: 65
* key: 星期一, value: 30
*/
那么如何保证预期展示结果如我们所想呢,这个时候就需要用到LinkedHashMap实体。
首先我们把上述代码用LinkedHashMap进行重构
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("星期一", 40);
map.put("星期二", 43);
map.put("星期三", 35);
map.put("星期四", 55);
map.put("星期五", 45);
map.put("星期六", 35);
map.put("星期日", 30);
for (Map.Entry<String, Integer> entry : map.entrySet()){
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}
这个时候,结果正如我们所预期