TreeMap用法总结
TreeMap用法总结
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, Serializable
TreeMap中的元素默认按照keys的自然排序排列。
(对Integer来说,其自然排序就是数字的升序;对String来说,其自然排序就是按照字母表排序)
构造函数
TreeMap():创建一个空TreeMap,keys按照自然排序TreeMap<Integer, String> treeMap = new TreeMap<>();
TreeMap(Comparator comparator):创建一个空TreeMap,按照指定的comparator排序TreeMap<Integer, String> map = new TreeMap<>(Comparator.reverseOrder());
map.put(3, "val");
map.put(2, "val");
map.put(1, "val");
map.put(5, "val");
map.put(4, "val");
System.out.println(map); // {5=val, 4=val, 3=val, 2=val, 1=val}
TreeMap(Map m):由给定的map创建一个TreeMap,keys按照自然排序Map<Integer, String> map = new HashMap<>();
map.put(1, "val");
...
TreeMap<Integer, String> treeMap = new TreeMap<>(map);
TreeMap(SortedMap m):由给定的有序map创建TreeMap,keys按照原顺序排序
常用方法
增添元素
V put(K key, V value):将指定映射放入该TreeMap中V putAll(Map map):将指定map放入该TreeMap中
删除元素
void clear():清空TreeMap中的所有元素V remove(Object key):从TreeMap中移除指定key对应的映射
修改元素
V replace(K key, V value):替换指定key对应的value值boolean replace(K key, V oldValue, V newValue):当指定key的对应的value为指定值时,替换该值为新值
查找元素
boolean containsKey(Object key):判断该TreeMap中是否包含指定key的映射boolean containsValue(Object value):判断该TreeMap中是否包含有关指定value的映射Map.Entry<K, V> firstEntry():返回该TreeMap的第一个(最小的)映射K firstKey():返回该TreeMap的第一个(最小的)映射的keyMap.Entry<K, V> lastEntry():返回该TreeMap的最后一个(最大的)映射K lastKey():返回该TreeMap的最后一个(最大的)映射的keyv get(K key):返回指定key对应的valueSortedMap<K, V> headMap(K toKey):返回该TreeMap中严格小于指定key的映射集合SortedMap<K, V> subMap(K fromKey, K toKey):返回该TreeMap中指定范围的映射集合(大于等于fromKey,小于toKey)
遍历接口
Set<Map<K, V>> entrySet():返回由该TreeMap中的所有映射组成的Set对象void forEach(BiConsumer<? super K,? super V> action):对该TreeMap中的每一个映射执行指定操作Collection<V> values():返回由该TreeMap中所有的values构成的集合
其他方法
Object clone():返回TreeMap实例的浅拷贝Comparator<? super K> comparator():返回给该TreeMap的keys排序的comparator,若为自然排序则返回nullint size():返回该TreepMap中包含的映射的数量
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "a");
treeMap.put(2, "b");
treeMap.put(3, "c");
treeMap.put(4, "d"); // treeMap: {1=a, 2=b, 3=c, 4=d}
treeMap.remove(4); // treeMap: {1=a, 2=b, 3=c}
int sizeOfTreeMap = treeMap.size(); // sizeOfTreeMap: 3
treeMap.replace(2, "e"); // treeMap: {1=a, 2=e, 3=c}
Map.Entry entry = treeMap.firstEntry(); // entry: 1 -> a
Integer key = treeMap.firstKey(); // key: 1
entry = treeMap.lastEntry(); // entry: 3 -> c
key = treeMap.lastKey(); // key: 3
String value = treeMap.get(3); // value: c
SortedMap sortedMap = treeMap.headMap(2); // sortedMap: {1=a}
sortedMap = treeMap.subMap(1, 3); // sortedMap: {1=a, 2=e}
Set setOfEntry = treeMap.entrySet(); // setOfEntry: [1=a, 2=e, 3=c]
Collection<String> values = treeMap.values(); // values: [a, e, c]
treeMap.forEach((integer, s) -> System.out.println(integer + "->" + s));
// output:
// 1 -> a
// 2 -> e
// 3 -> c
遍历方式
for循环
for (Map.Entry entry : treeMap.entrySet()) {
System.out.println(entry);
}
迭代器循环
Iterator iterator = treeMap.entrySet().iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
补充:如何选择合适的Map
- HashMap可实现快速存储和检索,但其缺点是其包含的元素是无序的,这导致它在存在大量迭代的情况下表现不佳。
- LinkedHashMap保留了HashMap的优势,且其包含的元素是有序的。它在有大量迭代的情况下表现更好。
- TreeMap能便捷的实现对其内部元素的各种排序,但其一般性能比前两种map差。
LinkedHashMap映射减少了HashMap排序中的混乱,且不会导致TreeMap的性能损失。
参考
TreeMap用法总结的更多相关文章
- java TreeMap用法
转自:http://huchenqiang90.blog.163.com/blog/static/11250080020101025956498/ 最近工作遇到需要按一个model中不同的列进行排序的 ...
- 红黑树、TreeMap、TreeSet
事先声明以下代码基于JDK1.8版本 参考资料 大部分图片引自https://www.jianshu.com/p/e136ec79235c侵删 https://www.cnblogs.com/skyw ...
- Java学习资源 - J2SE
java.lang包教程 Java集合类详解 Java回顾之集合 Java回顾之序列化 Java回顾之反射 深入理解Java:类加载机制及反射 Java 下高效的反射工具包 ReflectASM 使用 ...
- 零基础学习java------day15--------collections用法,比较器,Set(TreeSet,TreeMap),异常
1. Collections用法 Collections: 集合的工具类public static <T> void sort(List<T> list) 排序,升序publi ...
- HashMap,HashTable,TreeMap区别和用法
开始学HashTable,HashMap和TreeMap的时候比较晕,觉得作用差不多,但是到实际运用的时候又发现有许多差别的.需要大家注意,在实际开发中以需求而定. java为数据结构中的映射定义了一 ...
- hashMap、ConcurrentHashMap、hashTable、TreeMap、LinkedHashMap用法区别详解
Java集合中设计了一个接口Java.util.Map,它实现类中hashMap.hashTable.TreeMap.ConcurrentHashMap.LinkedHashMap. Map类型的集合 ...
- 计算机程序的思维逻辑 (43) - 剖析TreeMap
40节介绍了HashMap,我们提到,HashMap有一个重要局限,键值对之间没有特定的顺序,我们还提到,Map接口有另一个重要的实现类TreeMap,在TreeMap中,键值对之间按键有序,Tree ...
- [转]Java中Map的用法详解
转载地址:http://www.zhixing123.cn/jsp/30113.html Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictio ...
- Collection List Set和Map用法与区别
labels:Collection List Set和Map用法与区别 java 散列表 集合 Collection 接 口的接口 对 象的集合 ├ List ...
随机推荐
- How do you run an interactive process in Dart?
https://stackoverflow.com/questions/12682269/how-do-you-run-an-interactive-process-in-dart The test ...
- MySQL数据库之互联网常用分库分表方案
一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...
- Fluxay流光使用
扫描IPC主机 填写扫描地址.扫描类型为NT/98 显示如下,扫描成功 扫描用户列表 显示如下,扫描成功 下面想怎么做就怎么做 IPC连接失败原因 对方未打开IPC共享 对方未开启139或445端口 ...
- JENKINS安卓打包CI
jenkins构建脚本: [root@localhost tomcat]# cat move.sh #!/bin/bash # author lql release_dir=/data/android ...
- 《我是一只IT小小鸟》读书笔记——第七周
我是一只IT小小鸟,每一个程序员都是从这样的阶段成长起来的,问题是是否能一开始就找到正确的路径,少走弯路.本书收集了许多年轻程序员从大学开始到就业的成长之路,十分有指导价值也很让人深思. 切忌急功近利 ...
- ffmpeg基础使用
https://www.jianshu.com/p/ddafe46827b7
- centos7.6在线yum安装docker-ce
概述: 利用阿里的mirrror的docker-ce仓库,在线安装docker-ce 部署环境: CentOS Linux release 7.6.1810 (Core) 01.添加docker-ce ...
- Docker04-镜像
目录 镜像介绍 获取镜像 案例:获取 redis 5.0.0的镜像 查询本地镜像 搜索镜像 删除镜像 案例:删除redis:latest镜像 镜像加速 镜像介绍 镜像是Docker的三大核心概念之一. ...
- php导出数据到csv
序言 php导出数据到csv是一种很常见的功能,且csv相比于excel文件有其一定的优势,首先csv对数据的行数没有限制,但是excel对数据的行数有一定的限制,因此,csv文件对于导出大量的数据来 ...
- FreeBSD设置开机同步时间
没有设置开机同步时间的话,重启之后时间不对. 如果装机时没正确设置时区,先设置时区:# tzsetup 用date命令手工设置时间一方面不方便,另一方面也依赖于本地管理员的时钟的正确性,那么网络上不同 ...