Java中TreeMap类

news/2024/5/18 14:17:13

TreeMap

TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。如果使用排序的映射,建议使用TreeMap。在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常。


之前总结TreeSet类中实现排序的源码,发现是由TreeMap类进行实现的,所以在TreeMap中key如果是自定义类则需要自己定义规则来进行排序,有两种办法

在Student类中实现Comparable,重写compareTo方法
在构造函数中new Comparator,匿名内部类,重写compare 方法

以下的代码将展示第二种排序方式

public class TestTreeMap {
    public static void main(String[] args) {
        //1.创建集合
        TreeMap<Student, String> map = new TreeMap<Student, String>(new Comparator<Student>() {
            //按照年龄来排序,年龄相同按照姓名来排序
            @Override
            public int compare(Student o1, Student o2) {
                if(o1.getAge()==o2.getAge()){
                    return o1.getName().compareTo(o2.getName());
            }
            return o1.getAge()-o2.getAge();
            });
        //2.创建学生对象并往集合中增加
        Student s1 = new Student("张三",27);
        Student s2 = new Student("李四",29);
        Student s3 = new Student("王五",16);
        Student s4 = new Student("张三",27);
        map.put(s1, "2001");
        map.put(s2, "2002");
        map.put(s3, "2003");
        map.put(s4, "2004");

        //3.遍历集合 ,排序完成
        Set<Student> set = map.keySet();
        for(Student student : set){
            String value = map.get(student);
            System.out.println(student.getName()+"=="+student.getAge()+"=="+value);
        }
    }
}
附上TreeSet类的地址便于回顾: 点击打开链接

http://www.niftyadmin.cn/n/2104493.html

相关文章

iOS开发篇——非运行状态(应用启动场景)介绍

蓝鸥iOS培训讲师推荐&#xff1a;iOS开发指南必备篇&#xff0c;要学好应用启动场景就要掌握下面内容。首先介绍的时场景描述&#xff1a;用户点击应用图标的时候&#xff0c;很有可能是头一次启动这个应用&#xff0c;也有可能是应用终止后又启动。那么场景的状态跃迁过程如下…

Java中Hashtable类

HashtableHashtable是遗留类&#xff0c;很多映射的常用功能与HashMap类似&#xff0c;不同的是它承自Dictionary类&#xff0c;并且是线程安全的&#xff0c;任一时间只有一个线程能写Hashtable&#xff0c;并发性不如ConcurrentHashMap&#xff0c;因为ConcurrentHashMap引入…

第8件事 3步打造产品的独特气质

1.到底什么才是产品的气质&#xff1f;气质&#xff1d;独特魅力&#xff0c;吸引别人注意&#xff0c;使看到的人“过目不忘”&#xff0c;并且让别人“不可救药”地、疯狂地爱上。有这样一种产品&#xff0c;它能让你一见钟情&#xff0c;它的某种特质引发你内心的共鸣&#…

Java中HashMap类和Hashtable类的区别

Hashtable和HashMap到底有哪些不同呢 &#xff08;1&#xff09;基类不同&#xff1a;HashTable基于Dictionary类&#xff0c;而HashMap是基于AbstractMap。Dictionary是什么&#xff1f;它是任何可将键映射到相应值的类的抽象父类&#xff0c;而AbstractMap是基于Map接口的骨干…

创建SpringBoot项目

1.安装Java环境 安装了Java环境直接下一步&#xff0c;没有安装的话&#xff1a;http://www.cnblogs.com/i-tao/p/8587279.html 2.安装Eclipse开发工具 安装了Eclipse直接下一步&#xff0c;没有安装直接去官网下载Eclipse&#xff1a;https://www.eclipse.org/downloads/eclip…

jetty性能优化思路整理

一、一般调优的基本过程 1.明了需要调优的系统架构 2.设定性能调优的目标 3.明了目标当前的性能情况 4.找出目前的性能瓶颈的所在 5.解决引起性能瓶颈的根本问题 6.重复以上过程直到达到设定目标性能为止 二、性能指标&#xff1a; 吞吐率 并发数 三、调优点&#xff1a; 1.硬件…

Java中ConcurrentHashMap类

什么是ConcurrentHashMap&#xff1f;ConcurrentHashMap(简称CHM)是在Java 1.5作为Hashtable的替代选择新引入的&#xff0c;是concurrent包的重要成员。ConcurrentHashMap的锁分段技术HashTable容器在竞争激烈的并发环境下表现出效率低下的原因&#xff0c;是因为所有访问Hash…

Java中Collections类

Collections是针对集合操作的工具类,有一些功能。&#xff08;没有构造方法&#xff0c;但是其中的方法都是静态的&#xff09;常用方法public static <T> int binarySearch(List<T> list, T key) 使用二分搜索法搜索指定列表&#xff0c;以获得指定对象&#xff…