TreeMap用法总结

简介: TreeMap用法总结

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天

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的第一个(最小的)映射的key Map.Entry<K, V> lastEntry():返回该TreeMap的最后一个(最大的)映射 K lastKey():返回该TreeMap的最后一个(最大的)映射的key v get(K key):返回指定key对应的value SortedMap<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 values():返回由该TreeMap中所有的values构成的集合 其他方法 Object clone():返回TreeMap实例的浅拷贝 Comparator<? super K> comparator():返回给该TreeMap的keys排序的comparator,若为自然排序则返回null int 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 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的性能损失。

相关文章
|
负载均衡 架构师 Java
详细讲解OpenFeign的使用姿势!
学会使用Feign最贱优雅地调用服务
23730 9
详细讲解OpenFeign的使用姿势!
Maven之阿里云镜像仓库配置
方式一:全局配置可以添加阿里云的镜像到maven的setting.xml配置中,这样就不需要每次在pom中,添加镜像仓库的配置,在mirrors节点下面添加子节点: <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.
|
10月前
|
存储 监控 Java
Java 异步编程常见难题深度拆解与解决方案
本文深入探讨Java异步编程的核心技术与常见难题,涵盖同步与异步的区别、核心接口(Future、Callable、CompletableFuture)的使用,以及回调地狱、任务组合、异常处理、线程池管理等难点的解决方案。通过实际案例与代码示例,帮助开发者掌握异步编程技巧,提升系统性能与资源利用率。同时,文章还提供了性能优化建议与最佳实践,如合理配置线程池、避免过度异步及加强监控日志。适合希望深入理解Java异步编程的开发人员。[点此获取代码示例](https://pan.quark.cn/s/14fcf913bae6)。
349 4
|
10月前
|
人工智能 Java 数据库
如何保证接口幂等性?
在分布式系统中,接口幂等性至关重要。本文详解其定义、重要性及实现方案,包括唯一索引、Token机制、分布式锁、状态机与版本号机制,并提供最佳实践建议,助你提升系统可靠性与用户体验。
2107 1
TreeMap的排序
TreeMap的排序
601 0
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
存储 Java
HashMap的扩容机制是怎样的
在Java中,HashMap 是一个基于哈希表的键值对集合,它以其高效的存取性能而广泛使用。HashMap 的扩容机制是其性能优化的关键部分,本文将详细介绍这一机制的工作原理和过程。
|
运维 Devops Java
DevOps 工具链:从代码到生产
【8月更文第30天】在现代软件开发中,DevOps(Development 和 Operations 的结合)已成为确保快速而可靠的软件交付的关键方法。DevOps 通过自动化流程将软件开发与 IT 运维相结合,从而实现持续集成 (CI) 和持续部署 (CD)。本文将介绍一个典型的 DevOps 工具链,并提供实际的代码示例来帮助您理解如何将这些工具集成在一起。
755 5
|
监控 安全 测试技术
现在公司都在用的CI/CD框架到底是什么?
现在公司都在用的CI/CD框架到底是什么?
6897 1