【TreeSet集合】比较器排序Comparator的使用

news2025/5/19 7:59:38

比较器排序Comparator的使用

  • 存储学生对象并遍历,创建TreeSet集合使用带参构造方法

  • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序

    创建学生类:

    package com.gather.set.treeset;
    public class Student1 {
        private String name;
        private int age;
        public Student1() {
        }
        public Student1(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    测试类:

    package com.gather.set.treeset;
    import java.util.Comparator;
    import java.util.TreeSet;
    public class TreeSetDemo03 {
        public static void main(String[] args) {
            TreeSet<Student1> ts = new TreeSet<Student1>(new Comparator<Student1>() {  //传递比较器接口
                @Override
                public int compare(Student1 s1, Student1 s2) {
                    int num = s1.getAge() - s2.getAge();//调方法访问成员变量值
                    int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
                    return num2;
                }
            });
            Student1 s1 = new Student1("xishi", 29);
            Student1 s2 = new Student1("wangzhaojun", 28);
            Student1 s3 = new Student1("diaochan", 30);
            Student1 s4 = new Student1("yangyuhuan", 33);
            Student1 s5 = new Student1("lisi", 33);
            //把学生添加到集合
            ts.add(s1);
            ts.add(s2);
            ts.add(s3);
            ts.add(s4);
            ts.add(s5);
            //遍历
            for (Student1 s : ts) {
                System.out.println(s.getName() + "," + s.getAge());
            }
        }
    }
    

在这里插入图片描述

使用比较器进行排序在创建TreeSet集合时要传递Comparator的实现类对象,重写compare()方法,根据返回值进行排序。在compare方法体里面使用对象调方法访问成员变量比较年龄是否相同(返回值为0),不能直接访问私有成员变量。当年龄相同时按照姓名的字母进行排序,如果不相同就直接按照年龄升序返回。

  • 两种比较方式总结
    • 自然排序:自定义类要实现Comparatable接口,重写comparaTo方法,根据返回值进行排序
    • 比较器排序:创建TreeSet集合时要传递Comparator的实现类对象,重写compare(T o1,T o2)方法,根据返回值进行排序

注意:在重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx网站服务——编译安装与系统服务添加

一、Nginx简介 Nginx特点&#xff1a;&#xff08;占用内存少&#xff0c;并发能力强&#xff09; Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器&#xff0c;而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启…

makefile编译debug版本调试时无法定位到源文件:No source available for “main() at 0x8544“

问题 之前用makefile编译了一个release版本的可执行文件&#xff0c;但是后面想调试的时候发现无法调试。 觉得-g就能解决问题&#xff0c;后面发现根本不行。 这里虽然加了-g选项&#xff0c;但是调试的时候还是出现找不到源文件的情况。 解决方案 对已有的C/C工程用mak…

Backtrader官方中文文档:第三章Quickstart Guide快速入门

本文档参考backtrader官方文档&#xff0c;是官方文档的完整中文翻译&#xff0c;可作为backtrader中文教程、backtrader中文参考手册、backtrader中文开发手册、backtrader入门资料使用。 快速入门章节目录 快速入门使用平台从0到100&#xff1a;一步一步的演示基本设置设置现…

2023PS beta 爱国版注册安装教程

软件介绍 主要新功能包括: Generative Fill功能(仅在Photoshop Beta桌面应用程序中可用)。这是一个新的工具,可以使用简单的文本提示非破坏性地添加,扩展或删除图像中的内容,以实现令人惊喜,高兴和震惊的真实结果——几秒钟内。要使用此功能,请选择图像中的目标对象或区域,然…

全局流控 or 端到端拥塞控制

同事推荐一篇论文 Bolt: Sub-RTT Congestion Control for Ultra-Low Latency&#xff0c;写点想法。 端到端原则使网络在拥塞控制中始终扮演配角&#xff0c;人们认为拥塞控制是端到端的事。几十年来人们设计的拥塞控制机制始终围绕 “主机在什么情况下要增减 cwnd” 打转。但…

MongoDB 分片集的基本概念

什么是分片集&#xff1f; 副本集&#xff08;ReplicaSet&#xff09; 用于解决读请求扩展、高可用等问题。但随着业务场景的进一步增长&#xff0c;可能会出现以下问题&#xff1a; 存储容量超出单机磁盘容量&#xff1b;活跃数据集超出单机内存容量&#xff0c;很多读请求需…

使用Python将《青花瓷》歌词生成词云图

哈喽大家好&#xff0c;因为上次有小伙伴问我&#xff0c;歌曲的歌词和评论怎么生成词云图&#xff0c;想买代码… 当时我就拒绝了&#xff0c;直接免费送给了他。 所以今天来分享给大家 我们以周董的《青花瓷》为例&#xff0c;要对《青花瓷》歌词生成词云图&#xff0c;需…

[Flash][AS3]“懒惰式引用计数回收内存“导致程序崩溃(闪退)

最近在做Flash项目时候发现&#xff0c;Flash CS6 发布的程序在运行超过两个小时后会闪退&#xff0c;在仔细检查脚本代码和资源文件后&#xff0c;排除了这两个方面的原因。又猜测是内存或者GDI泄漏&#xff0c;在任务管理器中观察了一段时间&#xff0c;程序的GDI没有任何变化…

电脑开机总是卡到不能动怎么重装系统?

电脑开机总是卡到不能动怎么重装系统&#xff1f;有用户反馈自己的电脑在开机之后&#xff0c;总是会出现卡死的情况&#xff0c;无法进行任何的操作。遇到这个问题我们可以使用U盘重装系统的方法来进行电脑系统的重装&#xff0c;接下来我们一起来看看以下具体的操作步骤教学吧…

3.7 图像压缩

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 1.什么是图像压缩&#xff1f; 在动态规划中&#xff0c;图像压缩是指通过减少图像数据的存储空间&#xff0c;以实现图像文件的压缩和存储优化。动态规…

chatgpt赋能python:从后往前取:Python列表的高效操作

从后往前取&#xff1a;Python列表的高效操作 在Python编程中&#xff0c;列表&#xff08;List&#xff09;是最常用的数据类型之一。列表可以保存任意类型的元素&#xff0c;比如数字、字符串、甚至是其他列表等。在这篇文章中&#xff0c;我们将关注Python列表中从后往前取…

【CSS3系列】第四章 · CSS3新增渐变

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

chatgpt赋能python:Python列表全排列

Python列表全排列 列表是Python中最常用的数据结构之一&#xff0c;它允许我们将多个值&#xff08;数据&#xff09;存储在一个变量中。在Python中&#xff0c;有时我们需要对列表中的元素进行全排列&#xff0c;也就是根据不同的顺序重新排列列表中的元素。本文将介绍如何在…

计算机网络实验:交换机的基本配置与管理

目录 前言实验目的实验内容实验过程总结 前言 本实验旨在了解交换机的基本功能和工作原理&#xff0c;掌握交换机的配置方法和命令&#xff0c;学习交换机端口的基本设置和管理&#xff0c;以及交换机MAC地址表的查看和维护。通过本实验&#xff0c;学生可以熟悉交换机的操作界…

远程面试阿里、蚂蚁、京东、美团后整理份283页Java核心面试宝典

本文整理了一些面试时面试官必问的知识点&#xff0c;其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。 以下是文档涉及的主要内容&#xff1a; &#…

2021-06-10 51单片机,键控流水灯——中断方式

缘由https://ask.csdn.net/questions/7444779?spm1005.2025.3001.5141 #include "reg52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; bit kk0; void zdsz() {EAEX0IT01; } void main() {unsigned char Xd0;unsigned int ys4747,d10;zdsz();while(1){if(!ys)…

系统自学黑客/网络安全技术三要素:手快、眼快、脑子快

前言 网络安全这个行业优势有&#xff1a;需求量大&#xff0c;人才紧急&#xff0c;门槛低&#xff0c;工资高。对于许多未曾涉足IT行业「小白」来说&#xff0c;深入地学习网络安全是一件十分困难的事。 关于我 本人是一位90后奇安信驻场网络安全工程师。上海交通大学软件…

Ai作画区域控制的几种方法

背景 距上次发文章&#xff0c;又过去好久。这期分享给大家带来的是Ai作画的图结构控制几种方法。现在大家用AI作画大部分情况是直接使用AI单图生成能力&#xff0c;其实并不太会取考虑构图&#xff0c;也不太会考虑到大图的图结构这件事。其实构图这件事是一件很综合复杂的事…

javascript基础十七:bind、call、apply 区别?如何实现apply、call、bind?

一、作用 call、apply、bind作用是改变函数执行时的上下文&#xff0c;简而言之就是改变函数运行时的this指向 那么什么情况下需要改变this的指向呢&#xff1f; 举个粟子&#xff1a; var name 小爱同学 undefined const obj {name:allen ye,say:function(){console.log(th…

Wi-Fi演进史及关键技术

Wi-Fi演进史及关键技术 文章目录 Wi-Fi演进史及关键技术摘要第一章 Wi-Fi的发展历程1.1 Wi-Fi发展历史1.2 802.11标准的演进 第二章 近代Wi-Fi的核心技术2.1 Wi-Fi 6核心技术2.1.1 OFDMA频分复用技术2.1.2 DL/UL MU-MIMO技术2.1.3 1024QAM2.1.4 空分复用技术&#xff08;SR&…