李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
容器深入研究--SortedMap和LinkedHashMap
Leefs
2020-01-19 AM
1912℃
0条
# 容器深入研究--SortedMap和LinkedHashMap ### 前言 本篇将讲述《Java编程思想》第17.8.2小节,SortedMap和第17.8.3小节,LinkedHashMap ### 概述 使用SortedMap,可以确保键处于排序状态。这使得它具有额外的功能,这些功能由SortedMap接口中的下列方法提供: > Comparator comparator():返回当前Map使用的Comparator;或者返回null,表示以自然方式排序。 > > T firstKey():返回Map中的第一个键。 > > T lastKey():返回Map中的最末一个值。 > > SortedMap subMap(fromKey,toKey):生成此Map的子集,范围由fromKey(包含)到toKey(不包含)的键确定。 > > SortedMap headMap(toKey):生成此Map的子集,由键小于toKey的所有键值对组成。 > > SortedMap tailMap(fromKey):生成此Map的子集,由键大于或等于fromKey的所有键值对组成。 **代码示例** ```java public class SortedMapDemo { public static void main(String[] args) { TreeMap
sortedMap = new TreeMap
(new CountingMapData(10)); System.out.println(sortedMap); Integer low = sortedMap.firstKey(); Integer high = sortedMap.lastKey(); System.out.println(low); System.out.println(high); Iterator
it = sortedMap.keySet().iterator(); for(int i=0;i<=6;i++){ if(i == 3) low = it.next(); if(i == 6) high = it.next(); else it.next(); } System.out.println(low); System.out.println(high); System.out.println(sortedMap.subMap(low,high)); System.out.println(sortedMap.headMap(high)); System.out.println(sortedMap.tailMap(low)); } } ``` > 运行结果 ``` {0=A0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0, 6=G0, 7=H0, 8=I0, 9=J0} 0 9 3 7 {3=D0, 4=E0, 5=F0, 6=G0} {0=A0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0, 6=G0} {3=D0, 4=E0, 5=F0, 6=G0, 7=H0, 8=I0, 9=J0} ``` 此处,键值对是按键的次序排列的。TreeMap中的次序是有意义的,因此“位置”的概念才有意义,所以才能取得第一个和最后一个元素,并且可以提取Map的子集。 ### LinkedHashMap 为了提高速度,LinkedHashMap散列化所有的元素,但在遍历键值对时,却又以元素的插入顺序返回键值对。此外,可以在构造器中设定LinkedHashMap,使之使用基于访问的最近最少使用(LRU)算法,于是没有被访问过的元素就会出现在队列的前面。对于需要定期清理元素以节省空间的程序来说,此功能是的程序很容易实现。 > 代码示例 ```java public class LinkedHashMapDemo { public static void main(String[] args) { LinkedHashMap
linkedMap = new LinkedHashMap
(new CountingMapData(9)); System.out.println(linkedMap); linkedMap = new LinkedHashMap
(16, 0.75f, true); linkedMap.putAll(new CountingMapData(9)); System.out.println(linkedMap); for(int i = 0; i < 6; i++) { linkedMap.get(i); } System.out.println(linkedMap); System.out.println(linkedMap.get(0)); System.out.println(linkedMap); } } ``` > 运行结果 ``` {0=A0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0, 6=G0, 7=H0, 8=I0} {0=A0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0, 6=G0, 7=H0, 8=I0} {6=G0, 7=H0, 8=I0, 0=A0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0} A0 {6=G0, 7=H0, 8=I0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0, 0=A0} ``` 在输出中可以看到,键值对是以插入的顺序进行遍历的,甚至LRU算法的版本也是如此。但是,在LRU版本中,在(只)访问过前面六个元素后,最后三个元素移动到了队列前面。然后再一次访问元素“o”时,它就被移到队列后端了。
标签:
Java
,
Java编程思想
,
容器深入研究
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/441.html
上一篇
Jenkins安装
下一篇
【转载】Java中newInstance()和new()
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
随笔
Flume
并发线程
Sentinel
并发编程
散列
字符串
JavaWeb
Java工具类
nginx
数据结构
Tomcat
Quartz
Spark RDD
Git
ajax
Typora
Map
Netty
NIO
Yarn
FastDFS
队列
锁
Spark Streaming
国产数据库改造
微服务
VUE
Shiro
Kibana
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞