TreeSet的自然排序(自定义对象 compareTo方法)

简介: 》要实现自然排序,对象集合必须实现Comparable接口,并重写compareTo()方法 》一般需求中描述的是“主要条件”,如:按姓名长度排序。  需注意次要条件 如:长度相同时,姓名内容,年龄等条件是否相等,这决定着是否存入TreeSet集合。

》要实现自然排序,对象集合必须实现Comparable接口,并重写compareTo()方法

》一般需求中描述的是“主要条件”,如:按姓名长度排序。  需注意次要条件 如:长度相同时,姓名内容,年龄等条件是否相等,这决定着是否存入TreeSet集合。

 

package cn.itcast.day21.treeset;
/*
 * 要实现自然排序,就一定要实现Comparable接口,并重写compareTo()方法
 * 
 * 若不实现Comparable接口,而把对象往TreeSet中添加,就会报ClassCastException
 *       原因:java.util.TreeMap.put(TreeMap.java:542) 
 *      Comparable<? super K> k = (Comparable<? super K>) key;//key=集合元素,被强行转换成接口类型 
 * 
 */
public class Student {
    private String name;
    private int age;
    
    public Student() {
        super();
    }
    public Student(String name, int age) {
        super();
        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;
    }
    
    @Override
    public int  {
        int num=this.getName().length()-o.getName().length();
        int num2=num==0?this.getName().compareTo(o.getName()):num;
        int num3=num2==0?this.getAge()-o.getAge():num2;
        
        return num3;
    }
}

 

 

package cn.itcast.day21.treeset;

import java.util.TreeSet;

/*
 * TreeSet 按照自定义对象Student的姓名长度自然排序
 * 
 * 
 * 分析:
 *         A:实现自然排序,元素的类就要实现Comparable接口,并重写compareTo()方法
 *         B:主要条件 姓名长度
 *         C:次要条件  姓名内容,年龄
 */
public class TreeSetDemo {
    public static void main(String[] args) {
        //创建集合对象
        TreeSet<Student> ts=new TreeSet<Student>();
        //创建元素对象
        Student s1=new Student("linqingxia",27);
        Student s2=new Student("wuqilong",27);
        Student s3=new Student("wanglihong",34);
        Student s4=new Student("zhouxingchi",57);
        Student s5=new Student("linqingxia",28);
        Student s6=new Student("linqingxia",27);
        
        //添加集合元素
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        ts.add(s6);
        
        //遍历集合 
        for(Student s:ts){
            System.out.println(s.getName()+"-----"+s.getAge());
        }
    }

}
/** 运行结果:
wuqilong-----27
linqingxia-----27
linqingxia-----28
wanglihong-----34
zhouxingchi-----57
*/
开始做,坚持做,重复做
相关文章
|
Oracle 关系型数据库 数据库
实战篇:Oracle 数据坏块的 N 种修复方式
实战篇:Oracle 数据坏块的 N 种修复方式
实战篇:Oracle 数据坏块的 N 种修复方式
|
JavaScript 大数据 BI
Superset图表通过iframe嵌入Html网页展示一文详解
Superset图表通过iframe嵌入Html网页展示一文详解
2712 0
Superset图表通过iframe嵌入Html网页展示一文详解
|
Web App开发 关系型数据库 应用服务中间件
配置一个nginx+php-fpm的web服务器
一、基本信息 系统(L):CentOS 6.9 #下载地址:http://mirrors.sohu.com Web服务器(N):NGINX 1.14.0 #下载地址:http://nginx.org/en/download.
6979 0
|
12月前
|
人工智能
LongAlign:港大推出的提升文本到图像扩散模型处理长文本对齐方法
LongAlign是由香港大学研究团队推出的文本到图像扩散模型的改进方法,旨在提升长文本输入的对齐精度。通过段级编码技术和分解偏好优化,LongAlign显著提高了模型在长文本对齐任务上的性能,超越了现有的先进模型。
163 1
LongAlign:港大推出的提升文本到图像扩散模型处理长文本对齐方法
vscode——如何开启Edge进行调试
vscode——如何开启Edge进行调试
457 4
vscode——如何开启Edge进行调试
|
Java 程序员 C语言
赶快收藏!全网最佳Set集合详解:HashSet、TreeSet!
面试官:那TreeSet要怎么定制排序?TreeSet的自定义排序我们要利用Comparator接口,通过向TreeSet传入自定义排序规则的Comparator来实现。官方源码是这么解释的,南友们看一看。// 构造一个新的空树集,根据指定的比较器进行排序。// 插入到集合中的所有元素都必须能够通过指定的比较器相互比较: comparator. compare(e1, e2)不得对集合中的任何元素e1和e2抛出ClassCastException。
140 1
赶快收藏!全网最佳Set集合详解:HashSet、TreeSet!
|
存储 数据挖掘 数据处理
【解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG 】
【解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG 】
1194 0
|
SQL JSON 关系型数据库
SqlAlchemy 2.0 中文文档(七十五)(1)
SqlAlchemy 2.0 中文文档(七十五)
276 4
|
云安全 安全 网络安全
云计算与网络安全:技术挑战与应对策略
在数字化浪潮中,云计算成为企业和个人存储数据、运行应用的首选平台。然而,随之而来的网络安全问题也日益突出。本文将探讨云计算环境下的网络安全挑战,并提出相应的信息安全策略,以期为读者提供一套实用的云安全解决方案。
|
机器学习/深度学习 人工智能 自然语言处理
自动化办公:AI如何改变工作方式
【7月更文第19天】随着人工智能技术的飞速发展,我们的工作方式正经历着前所未有的转型。从繁琐的文档处理到高效的会议安排,再到个性化的邮件回复,AI正逐步成为现代办公不可或缺的一部分。本文将深入探讨AI如何在这些核心办公场景中发挥作用,提升工作效率,优化工作流程,从而推动工作方式的全面革新。
1240 3