java中compar_1.java中Comparor与Comparable的问题
1.Comparator中compare()与Comparable中compareTo()方法的区别
Treeset集合创建对象后,
A:如果是空构造,即TreeSet ts = new TreeSet(); ,那么ts.add();,时需要在Student上implements Comparable接口,在下面重写compareTo()方法,因为此时的add()调用的是compareTo()方法,底层以红黑二叉树,判断之后,排序
B:如果是带参构造,即TreeSet ts = new TreeSet(Comparator super E>comparator); ,ts.add()时,需要自己写个MyComparator类implements Comparator接口,(如果调用的较少的话,可以在创建对象的时候,以内部类的形式重写方法)或者在在MyComparator中重写compare()方法.
C:未解决的问题:为什么把
int num = s1.getName().length() -s2.getName().length();
(二叉树,左中右顺序)
s1与s2换个位置之后,就会倒着排序了,二叉树里,不是大的放在右边吗?
而且换个位置之后根节点还是第一个数吗?如果是的话,那么判断的时候
数是像哪样呢?
1 importjava.util.Comparator;2 importjava.util.TreeSet;3
4 /*
5 * 需求:按照姓名的长度排序6 *7 * public TreeSet(Comparator super E> comparator):构造一个新的空 TreeSet,它根据指定比较器进行排序。8 */
9 public classTreeSetDemo {10 public static voidmain(String[] args) {11 //创建集合对象12 //TreeSet ts = new TreeSet();13 //比较器排序14 //TreeSet ts = new TreeSet(new MyComparator());15 //内部类的形式
16 TreeSet ts = new TreeSet(new Comparator() {17 @Override18 public intcompare(Student s1, Student s2) {19 //按照姓名的长度排序
20 int num = s1.getName().length() -s2.getName().length();21 //当姓名的长度相同时,判断姓名是否相等
22 int num2 = num == 0 ?s1.getName().compareTo(s2.getName())23 : num;24 //当姓名相同时,判断年龄是否相等
25 int num3 = num2 == 0 ? s1.getAge() -s2.getAge() : num2;26 returnnum3;27 }28 });29 //创建学生对象
30 Student s1 = new Student("小fsd名", 12);31 Student s2 = new Student("小sdf白", 22);32 Student s3 = new Student("小sf黑", 33);33 Student s4 = new Student("小菜", 13);34 Student s5 = new Student("小黑", 33);35 Student s6 = new Student("小sdfsdfc", 13);36 Student s7 = new Student("小dsfsd黑黑", 33);37 Student s8 = new Student("小sfsd菜", 122);38 Student s9 = new Student("小黑", 33);39 Student s10 = new Student("小c", 13);40
41 //添加元素
42 ts.add(s1);43 ts.add(s2);44 ts.add(s3);45 ts.add(s4);46 ts.add(s5);47 ts.add(s6);48 ts.add(s7);49 ts.add(s8);50 ts.add(s9);51 ts.add(s10);52
53 //遍历元素
54 for(Student s : ts) {55 System.out.println(s);56 }57 }58 }
1 importjava.util.Comparator;2
3 public class MyComparator implements Comparator{4
5 @Override6 public intcompare(Student s1, Student s2) {7 //按照姓名的长度排序
8 int num = s1.getName().length() -s2.getName().length();9 //当姓名的长度相同时,判断姓名是否相等
10 int num2 = num == 0 ?s1.getName().compareTo(s2.getName()) : num;11 //当姓名相同时,判断年龄是否相等
12 int num3 = num2 == 0 ? s1.getAge() -s2.getAge() : num2;13 returnnum3;14 }15
16 }
1 //或者public class Student implements Comparable
2 public classStudent {3 //姓名
4 privateString name;5 //年龄
6 private intage;7
8 publicStudent() {9 super();10 }11
12 public Student(String name, intage) {13 super();14 this.name =name;15 this.age =age;16 }17
18 publicString getName() {19 returnname;20 }21
22 public voidsetName(String name) {23 this.name =name;24 }25
26 public intgetAge() {27 returnage;28 }29
30 public void setAge(intage) {31 this.age =age;32 }33
34 @Override35 publicString toString() {36 return "Student [name=" + name + ", age=" + age + "]";37 }38
39 //@Override40 //public int compareTo(Student s) {41 // //按照姓名的长度排序42 //int num = this.name.length() - s.name.length();43 // //当姓名的长度相同时,判断姓名是否相等44 //int num2 = num == 0 ? this.getName().compareTo(s.getName()) : num;45 // //当姓名相同时,判断年龄是否相等46 //int num3 = num2 == 0 ? this.getAge() - this.getAge() : num2;47 //return num3;48 //}
49 }
java中compar_1.java中Comparor与Comparable的问题相关推荐
- java.lang类在电脑哪个位置_Java中的java.lang.Class API 详解
且将新火试新茶,诗酒趁年华. 概述 Class是一个位于java.lang包下面的一个类,在Java中每个类实例都有对应的Class对象.类对象是由Java虚拟机(JVM)自动构造的. Class类的 ...
- java list 排序_Java中List的排序
场景 Bean定义如下,仅有一个类型为Integer的age字段. @NoArgsConstructor @AllArgsConstructor(staticName = "of" ...
- Java+包裹类型_java中的包裹类型
包裹类型将一个基本数据类型的数据转换成对象的形式,从而使得它们可以像对象一样参与运算和传递.下表列出了基本数据类型所对应的包裹类型: 基本类型 包裹类型 boolean Boolean c ...
- 数据结构与算法-java笔记一 更新中
数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...
- 【JAVA SE】java中的String类
目录 String类 什么是String类? String类的定义方式 String的内部 如何求字符串长度呢? String类对象的比较 字符串查找 总结charAt 字符串转化 数字与字符串之间的 ...
- Java并发编程(中下篇)从入门到深入 超详细笔记
接上一篇博客笔记:Java并发编程(中上篇)从入门到深入 超详细笔记_未来很长,别只看眼前的博客-CSDN博客https://blog.csdn.net/weixin_53142722/article ...
- java treeset 合并_Java中TreeSet合并重复数据
TreeSet与HashSet之间的区别: TreeSet会自动按自然排序法给元素排序,相应的性能会差一点.而HashSet是根据元素的hashCode自动给元素排序的,如果我们不需要使用排序功能,则 ...
- 【Java 8 新特性】Java Comparator 在 SortedMap 中使用 | TreeMap 和 ConcurrentSkipListMap 排序
Java Comparator 在 SortedMap 中使用 | TreeMap 和 ConcurrentSkipListMap 排序 在 TreeMap 中使用 在 ConcurrentSkipL ...
- matlab中调用java代码_Matlab中调用第三方Java代码
在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...
- java string 占位符_驳《阿里「Java开发手册」中的1个bug》?
前两天写了一篇关于<阿里Java开发手册中的 1 个bug>的文章,评论区有点炸锅了,基本分为两派,支持老王的和质疑老王的. 首先来说,无论是那一方,我都真诚的感谢你们.特别是「二师兄」, ...
最新文章
- 软件工程概论冲刺 第6天
- UA OPTI512R 傅立叶光学导论12 傅立叶级数基础
- doubango简介
- 关于CTeX的几个大坑
- Dapr 交通流量控制示例
- asterisk 支持 VP8 video编码 实现安卓的视频通话
- Linux系统的服务器配置minicom接console线调试交换机的步骤
- AngularJS控制器和过滤器学习(三)
- mysql dump锁表_mysqldump 锁表和解锁语句
- 9.2【彩色模型】-----基于Opencv实现-----把一幅RGB图转为CMY图
- encode_chunked=req.has_header(‘Transfer-encoding‘))问题解决方法
- CentOS 7 安装Mono 和 MonoDevelop
- 【编译原理笔记11】中间代码生成:类型表达式,声明语句的翻译
- 华为/华三IS-IS单区域配置
- 在Debian下安装LAMP
- 深度学习笔记(一)——初步理解yoloV3原理
- at24c08 E2PROM的I2C设备驱动实例——基于mini2440
- 视频教程-Unity5入门及进阶项目实战 星际迷航-Unity3D
- 面向削峰填谷的电动汽车多目标优化调度策略——附代码
- 计算机联锁系统工程设计论文,计算机联锁控制系统论文
热门文章
- python实用案例教程第四章答案_python 入门到实践第四章案例
- 解决:Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools“
- 树莓派 --- 控制舵机转动代码Python
- SPSS比较两组数据有无显著性差异 独立样本T检验
- 分布式系统如何保证数据一致性
- cocos2dx检测及预防外挂加速
- excel 基于RFM模型、帕累托分析的用户画像项目实战
- Linux下用rm删除的文件的恢复方法
- 软件测试行业用mac好还是win好,为了在Mac上也能用好Windows,我做了这些调整
- 准备工作-PPT母版