集合框架-TreeSet-Comparator比较器
时间:2021-10-23
本文章向大家介绍集合框架-TreeSet-Comparator比较器,主要包括集合框架-TreeSet-Comparator比较器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 package cn.itcast.p5.treeset.demo; 2 3 import java.util.Iterator; 4 import java.util.TreeSet; 5 6 import cn.itcast.p.bean.Person; 7 8 public class TreeSetDemo { 9 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 // demo1(); 13 TreeSet ts = new TreeSet(new ComparatorByName());//比较器排序优先于person的自然排序,实际开发比较器常用,person一般会实现comparator接口 14 /* 15 * 以Person对象的年龄进行从小到大的排序。 16 * 17 */ 18 ts.add(new Person("zhangsan",28)); 19 ts.add(new Person("wangwu",29)); 20 ts.add(new Person("lisi",21)); 21 ts.add(new Person("zhouqi",29)); 22 ts.add(new Person("zhaoliu",25));//Person cannot be cast to class java.lang.Comparable 23 24 Iterator it = ts.iterator(); 25 26 while(it.hasNext()) { 27 Person p = (Person)it.next(); 28 29 System.out.println(p.getName()+":"+p.getAge()); 30 } 31 } 32 33 34 35 /** 36 * 37 */ 38 public static void demo1() { 39 TreeSet ts = new TreeSet(); 40 41 ts.add("abc"); 42 ts.add("zaa"); 43 ts.add("aa"); 44 ts.add("nba"); 45 ts.add("cba"); 46 47 Iterator it = ts.iterator(); 48 49 while(it.hasNext()) { 50 System.out.println(it.next()); 51 } 52 } 53 54 }
1 package cn.itcast.p.bean; 2 3 public class Person /*treeset用*/implements Comparable { 4 private String name; 5 private int age; 6 7 8 public Person() { 9 super(); 10 // TODO Auto-generated constructor stub 11 } 12 public Person(String name, int age) { 13 super(); 14 this.name = name; 15 this.age = age; 16 17 } 18 19 @Override 20 public int hashCode() { 21 System.out.println(this+".....hashCode"); 22 // TODO Auto-generated method stub 23 return name.hashCode()+age*27;//age后面乘以一个数增大离散程度,减少返回哈希值相等的几率 24 //好比张三哈希值20 年龄40 李四哈希值30,年龄30 结果哈希值一样 25 //乘一个数后就不一样了离散程度变大了 26 27 28 //return 100;//会比较equals 29 } 30 public boolean equals(Object obj) { 31 //健壮性 32 if (this == obj) {//有可能传入相同的对象,可以先行判断是否为同一对象add(p) add(p)这种传入两次 33 return true; 34 } 35 if (!(obj instanceof Person)) {//判断是否为Person类型,类型不一致也不应该传入 36 throw new ClassCastException("类型错误"); 37 } 38 39 // System.out.println(this+"...equals...."+obj); 40 Person p = (Person)obj; 41 42 43 return this.name.equals(p.name) && this.age == p.age; 44 } 45 public String getName() { 46 return name; 47 } 48 public void setName(String name) { 49 this.name = name; 50 } 51 public int getAge() { 52 return age; 53 } 54 public void setAge(int age) { 55 this.age = age; 56 } 57 //ctrl+alt+s 快捷构造set,get方法 初始化等 58 public String toString() { 59 return name+":"+age; 60 } 61 @Override 62 public int compareTo(Object o) {//对象的自然排序(treeset) 63 // TODO Auto-generated method stub 64 Person p = (Person)o; 65 int temp = this.age - p.age; 66 return temp==0?this.name.compareTo(p.name):temp;//主要条件次要条件,以年龄 67 68 // int temp = this.name.compareTo(p.name); 69 // return temp==0?this.age-p.age:temp;//以名字为主要条件 70 /* 71 * if (this.age>p.age) 72 * return 1; 73 * 74 * if (this.age<p.age) 75 * return -1; 76 * if (this.age == p.age) { 77 * return this.name.compareTo(p.name); 78 * } 79 */ 80 81 } 82 }
1 package cn.itcast.p5.treeset.demo; 2 3 import java.util.Comparator; 4 5 import cn.itcast.p.bean.Person; 6 /* 7 * 创建了一个根据Person类的name进行排序的比较器 8 */ 9 public class ComparatorByName implements Comparator { 10 11 @Override 12 public int compare(Object o1, Object o2) { 13 // TODO Auto-generated method stub 14 Person p1 = (Person)o1; 15 Person p2 = (Person)o2; 16 17 int temp = p1.getName().compareTo(p2.getName()); 18 19 return temp==0?p1.getAge()-p2.getAge():temp; 20 21 } 22 23 }
见集合框架TXT
原文地址:https://www.cnblogs.com/doremi429/p/15449829.html
- 左手用R右手Python系列——使用多进程进行任务处理
- 2017.9.17校内noip模拟赛解题报告
- MySQL基础入门——MySQL与R语言、Python交互
- BizTalk Orchestration execute Flat file disassembler ReceivePipeline
- MySQL基础入门系列之——字符与日期数据处理
- P2038 无线网络发射器选址
- ggplot2双坐标轴的解决方案
- Modifying namespace in XML document programmatically
- ggplot2学习笔记——图例系统及其调整函数
- 一款脑洞大开的表格可视化神器
- P3908 异或之和
- P1939 【模板】矩阵加速(数列)
- R语言学习笔记之——数据处理神器data.table
- P3389 【模板】高斯消元法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter异步编程async与await的基本使用
- 教大家一个万能PPT图片排版技巧,太赞了!
- 重复读取 HttpServletRequest 中 InputStream 的方法
- 测试面试题集锦(三)| 计算机网络和数据库篇(附答案)
- 关于Scikit-Learn你(也许)不知道的10件事
- 技术天地 | CSS-in-JS:一个充满争议的技术方案
- 安全研究 | 通过域名劫持实现Azure DevOps账户劫持
- 一款针对DLL劫持的恶意DLL生成器
- AuthMatrix:一款针对Web应用和服务的认证安全检测BurpSuite工具
- KITT-Lite:基于Python实现的轻量级命令行渗透测试工具集
- 一次KimSuky攻击事件分析
- OpenCV中如何使用滚动条动态调整参数
- 一文读懂「分布式架构」
- 老哥,您看我这篇Java集合,还有机会评优吗?
- 在 IDEA 中使用 Java 热部署插件 JRebel