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的第一个(最小的)映射的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<V> 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<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用法总结的更多相关文章

  1. java TreeMap用法

    转自:http://huchenqiang90.blog.163.com/blog/static/11250080020101025956498/ 最近工作遇到需要按一个model中不同的列进行排序的 ...

  2. 红黑树、TreeMap、TreeSet

    事先声明以下代码基于JDK1.8版本 参考资料 大部分图片引自https://www.jianshu.com/p/e136ec79235c侵删 https://www.cnblogs.com/skyw ...

  3. Java学习资源 - J2SE

    java.lang包教程 Java集合类详解 Java回顾之集合 Java回顾之序列化 Java回顾之反射 深入理解Java:类加载机制及反射 Java 下高效的反射工具包 ReflectASM 使用 ...

  4. 零基础学习java------day15--------collections用法,比较器,Set(TreeSet,TreeMap),异常

    1. Collections用法 Collections: 集合的工具类public static <T> void sort(List<T> list) 排序,升序publi ...

  5. HashMap,HashTable,TreeMap区别和用法

    开始学HashTable,HashMap和TreeMap的时候比较晕,觉得作用差不多,但是到实际运用的时候又发现有许多差别的.需要大家注意,在实际开发中以需求而定. java为数据结构中的映射定义了一 ...

  6. hashMap、ConcurrentHashMap、hashTable、TreeMap、LinkedHashMap用法区别详解

    Java集合中设计了一个接口Java.util.Map,它实现类中hashMap.hashTable.TreeMap.ConcurrentHashMap.LinkedHashMap. Map类型的集合 ...

  7. 计算机程序的思维逻辑 (43) - 剖析TreeMap

    40节介绍了HashMap,我们提到,HashMap有一个重要局限,键值对之间没有特定的顺序,我们还提到,Map接口有另一个重要的实现类TreeMap,在TreeMap中,键值对之间按键有序,Tree ...

  8. [转]Java中Map的用法详解

    转载地址:http://www.zhixing123.cn/jsp/30113.html Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictio ...

  9. Collection List Set和Map用法与区别

    labels:Collection List Set和Map用法与区别 java 散列表 集合 Collection           接 口的接口      对 象的集合   ├   List   ...

随机推荐

  1. centos6安装composer

    需要使用到curl,没有的话需要 yum  -y install curl     ###安装一.下载:curl -sS https://getcomposer.org/installer | php ...

  2. 【Java基础】- Java学习路线图

    Java的学习路线图,整理以备自己学习和温习. 1.Java基础 具体内容: 1. 编程基础(开发环境配置.基础语法.基本数据类型.流程控制.常用工具类) 2. 面向对象(继承.封装.多态.抽象类.接 ...

  3. 【开发笔记】- 发送邮件(通过JavaMail发送)

    前段时间在工作中用到了邮件发送监控的报警信息,今天在这个记录一下JavaMail的邮件工具类. 下边为用到的JavaMail的jar包的pom依赖.这里用的是JavaMail的1.4.6的版本. &l ...

  4. linux下测试某网址或IP端口能否访问

    参考这篇 Linux系统下怎么测试端口的连通性 测试端口连通 nc -v -w 1 183.xx.oo.ee -z 82 1linux主机centos操作系统,项目里面需要访问一个URL路径的接口ht ...

  5. 【BBED】bbed常用命令

    [BBED]bbed常用命令         一.1  相关知识点扫盲 BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是O ...

  6. MySQL Replication--半同步复制(Semi-Sync Replication)

    半同步复制 默认配置下,MYSQL主从库通过binlog来保持一致,主库事务提交后,将binlog日志写入磁盘,然后返回给用户,备库通过拉取主库的binlog来同步主库的操作,无法保证主备节点数据实时 ...

  7. Trunk 实现跨交换机 VLAN 通信

    当网络中有多台交换机时,位于不同交换机上的相同VLAN的主机之间时如何通信的呢?我们使用Trunk实现跨交换机VLAN通信.还有以太网通道的操作哦. 实验拓扑 两台交换机直连,每台下面再连接两台VPC ...

  8. 191017 虚拟机centos修改IP

    1. 虚拟机设置 1.1 编辑-->虚拟机网络编辑器-->VMnet8-->更改设置-->DHCP设置取消打勾 -->选择NAT模式,查看网关IP 2. 本地网络设置 更 ...

  9. Pthon魔术方法(Magic Methods)-运算符重载

    Pthon魔术方法(Magic Methods)-运算符重载 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python运算符对应的魔术方法 1>.比较运算符 <: ...

  10. OpenStack核心组件-neutron网络服务

    1. neutron 介绍 1.1 Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能 ...