180217_JAVA学习_TreeSet中存放含多个String的类并设置排序规则
有Person类如下:
1 class Person { 2 String name; 3 int age; 4 String address; 5 }
有main如下:
1 import java.util.TreeSet; 2 3 public class Test{ 4 public static void main(String[] args){ 5 Person p1 = new Person("AA",18,"CN"); 6 Person p2 = new Person("BB",18,"JP"); 7 Person p3 = new Person("CC",18,"CN"); 8 9 TreeSet<Person> persons = new TreeSet<>(); 10 persons.add(p1); 11 persons.add(p2); 12 persons.add(p3); 13 for (Object person : persons) { 14 System.out.println(person); 15 } 16 } 17 }
由于TreeSet为可排序集合,所以要为存放对象(Person)指定排序规则。
排序规则:ASC(升序),age > address > name
故重写Person的compareTo():
1 public int compareTo(Person o) { 2 if(this.age > o.age){ 3 return 1; 4 }else if(this.age < o.age) { 5 return -1; 6 } 7 //判断age谁大,若相等,则判断address 8 int x = this.address.compareTo(o.address); 9 if(x != 0){ 10 return x; 11 } 12 //判断address谁大,若相等,则判断name 13 return this.name.compareTo(o.name); 14 }
注:若要DESC排序:
1、age比较中交换1/-1;
2、address比较中return相反数值;
3、name比较中return相反数值;
上述代码的逻辑顺序:
传入比较对象o与自身进行对比;
若this.age > o.age,返回“1”;
若this.age < o.age,返回“-1”;
若相等,比较address;
令x = this.address.compareTo(o.address);
若x != 0,即不相等,x即为要返回的值(1/-1);
若x == 0,即相等,比较name;
this.name.compareTo(o.name)的值即为要返回的值:
若值为 1,即大于,
若值为-1,即为小于,
若值为 0,即三处均相等,则完全相等,不应存入。
完整代码:
1 package toBKY; 2 3 import java.util.TreeSet; 4 5 public class Test{ 6 public static void main(String[] args){ 7 Person p1 = new Person("AA",18,"CN"); 8 Person p2 = new Person("BB",18,"JP"); 9 Person p3 = new Person("CC",18,"CN"); 10 11 TreeSet<Person> persons = new TreeSet<>(); 12 persons.add(p1); 13 persons.add(p2); 14 persons.add(p3); 15 16 for (Object person : persons) { 17 System.out.println(person); 18 } 19 //使用for each 比Iterator代码量少 20 21 } 22 } 23 24 class Person implements Comparable<Person>{ 25 String name; 26 int age; 27 String address; 28 29 public Person(String name, int age, String address) { 30 this.name = name; 31 this.age = age; 32 this.address = address; 33 } 34 35 @Override 36 public String toString() { 37 return "Person{" + 38 "name='" + name + '\'' + 39 ", age=" + age + 40 ", address='" + address + '\'' + 41 '}'; 42 } 43 44 @Override 45 public int compareTo(Person o) { 46 if(this.age > o.age){ 47 return 1; 48 }else if(this.age < o.age) { 49 return -1; 50 } 51 //判断age谁大,若相等,则判断address 52 int x = this.address.compareTo(o.address); 53 if(x != 0){ 54 return x; 55 } 56 //判断address谁大,若相等,则判断name 57 return this.name.compareTo(o.name); 58 } 59 }
转载于:https://www.cnblogs.com/ram314/p/8451827.html
180217_JAVA学习_TreeSet中存放含多个String的类并设置排序规则相关推荐
- 表中记录查询排序(设置排序规则)
--先创建一个表 create table ai( id int not null, no varchar(10) not null ) go --往表中插入数据 insert into ...
- 使用Spring JPA中Page、Pageable接口和Sort类完成分页排序
显示时,有三个参数,前两个必填,第几页,一页多少个size,第三个参数默认可以不填. 但是发现这个方法已经过时了,通过查看它的源码发现,新方法为静态方法PageRequest of(page,size ...
- SQL Server 与 MySQL 中排序规则与字符集相关知识的一点总结
字符集&&排序规则 字符集是针对不同语言的字符编码的集合,比如UTF-8字符集,GBK字符集,GB2312字符集等等,不同的字符集使用不同的规则给字符进行编码.排序规则则是在特定字符集 ...
- sqlserver中的字符编码、排序规则、nvarchar和varchar、大N‘‘
环境: sqlserver 2014 window 10 建议先阅读<细说ASCII.GB2312/GBK/GB18030.Unicode.UTF-8/UTF-16/UTF-32编码> 先 ...
- 【安卓学习之第三方库】 ZlwAudioRecorder学习:内部流程(含aar文件生成)
█ [安卓学习之第三方库] ZlwAudioRecorder学习:内部流程(含aar文件生成) █ 系列文章目录 提示:这里是收集了安卓学习之常见问题的相关文章 [安卓学习之MP3] MP3读取格式 ...
- 编程统计BUF字单元数据中所含1的个数,并将结果存入COUNT单元中。
编程统计BUF字单元数据中所含1的个数,并将结果存入COUNT单元中. 代码如下: DATA SEGMENT BUF DW 2345H ;随机存储一下数据 COUNT DB ? ;用于统计BUF字单元 ...
- vb.net调用oracle存储过程,vbnet2008连接oracle增删改查学习笔记(经典crud_含存储过程).doc...
vbnet2008连接oracle增删改查学习笔记(经典crud_含存储过程).doc 我的VBNETORACLE增删改查学习笔记(本源码在VBNET2008下测试通过)学习VBNET有一段时间了,之 ...
- Python 中的可执行对象 eval,exec 和 compile与其在深度学习训练中的应用实例
Python 中的可执行对象 eval,exec 和 compile 与其在深度学习训练中的应用实例 eval 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式(注意eval不支 ...
- CMU | 深度学习模型中集成优化、约束和控制
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作分享,不代表本公众号立场,侵权联系删除 转载于:专知 AI博士笔记系列推荐 周志华<机器学习>手推笔 ...
最新文章
- python转换维度
- 射频篇(一) 模拟、射频器件学习(1) —— 晶振(OSC)
- nasa数据库cm1数据集_获取下一个地理项目的NASA数据
- DGL实现同构/异构图卷积模型
- jQuery中的$.grep()方法的使用
- 三门问题的MonteCarlo仿真方法
- 网管学习日记-STP
- 飞翔pdf生成html,pdf转换成html转换器
- AB PLC和ESD维护及灯的含义
- win10红警2黑屏_Windows10黑屏常见情况及解决办法
- Nginx subs_filter模块替换文本
- linux服务器默认使用中文字符集zh_CN.UTF-8
- Python爬虫selenium的使用实例爬取知乎首页数据!
- ad软件one pin错误是啥意思_AD错误中英文对照
- Arcpy基础入门-3、arcpy创建地理处理工具
- pyhton爬取武汉地铁信息
- 电竞英雄联盟数据API接口 - 【近期赛事列表】API调用示例代码
- BCD码与16进制互转算法(转)
- GNU-Radio简介
- 神经反馈3——标准训练方案
热门文章
- Transact_SQL小手册
- AtlasControlToolkit.CascadingDropDownNameValue自定义用法
- 从理论到实践,机器人SLAM技术详解
- AI人工智能工程师 学习大纲
- narwal无法连接机器人_懒无止境 能自己洗抹布的云鲸J1扫拖机器人
- unity导出fbx模型_ARTBOOK艺书专栏:Fbx导出杂谈
- Oracle DML、DDL、DCL的区别
- 025_Jedis集群
- JavaScript在发送ajax请求时,URL域名地址是使用绝对地址还是相对地址?什么是浏览器跨域访问操作,js如何实现?
- The application's PagerAdapter changed the adapter's contents without calling notifyDataSetChanged