李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
容器深入研究--SortedMap和LinkedHashMap
Leefs
2020-01-19 AM
2528℃
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://lilinchao.com/archives/441.html
上一篇
Jenkins安装
下一篇
【转载】Java中newInstance()和new()
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Map
Flume
随笔
JavaWEB项目搭建
gorm
SpringCloudAlibaba
Hbase
哈希表
nginx
高并发
JavaSE
DataWarehouse
Docker
二叉树
Shiro
NIO
Nacos
栈
并发线程
Linux
Scala
Ubuntu
Stream流
Spring
Jquery
RSA加解密
FileBeat
Spark
队列
Elastisearch
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭