java 中Camparable接口中的问题(集合与映射)
答案:4 悬赏:0 手机版
解决时间 2021-12-04 05:25
- 提问者网友:wodetian
- 2021-12-03 18:34
java 中Camparable接口中的问题(集合与映射)
最佳答案
- 五星知识达人网友:千杯敬自由
- 2021-12-03 18:56
表示:比较当前的person和要比较的person哪一个的id大,把这个标准作为两个person的比较标准,在用集合框架排序的时候大的一般就排在后面。
Set接口在java中的定义本身就是无序的,如果用Set集合,就不要谈什么compareTo()方法了,没关系。
那位同学的回答是很好的。至于set集合顺序是不是只会使用toString(),我不知道,而且我也不太认同。
刚刚看了一下JDK的源码:TreeSet 集合元素的排序 是需要用到 Comparator super E>这个接口的,而不是Comparable。跟toString()也是没有关系的了。
Set接口在java中的定义本身就是无序的,如果用Set集合,就不要谈什么compareTo()方法了,没关系。
那位同学的回答是很好的。至于set集合顺序是不是只会使用toString(),我不知道,而且我也不太认同。
刚刚看了一下JDK的源码:TreeSet
全部回答
- 1楼网友:玩家
- 2021-12-03 21:57
compareTo()。个方法的返回值有3个
一, -1 代表第一个数小于第二个数
二, 0 代表两个数相等
三, 1 代表第一个数大于第二个数
排序时调用当前对象的compareTo()方法与下一个对象作比较
根据compareTo()的返回值来决定对象的存放顺序
一, -1 代表第一个数小于第二个数
二, 0 代表两个数相等
三, 1 代表第一个数大于第二个数
排序时调用当前对象的compareTo()方法与下一个对象作比较
根据compareTo()的返回值来决定对象的存放顺序
- 2楼网友:风格不统一
- 2021-12-03 20:36
这个方法的返回值,只在乎正负
- 3楼网友:逃夭
- 2021-12-03 20:03
是因为TreeSet的原因。
TreeSet会自动给填进去的数据排序。
由于你扔进的是一个对象的,他会调用对象的toString()方法去排序。
你又重写的toString()方法,所以就根据你toString()中返回的字符串进行排序....
compareTo方法你再咋折腾也没用,因为就没调用哪个
===================
避免你再问,告诉你咋调用那个方法: 我给你改了测试类
你这样再改改试试,你还会说都一样?
import java.util.Arrays;
public class TestComparable {
public static void main(String[] args) {
Person [] pp = new Person[4];
pp[0] = new Person(1123, 32, "王五");
pp[1] = new Person(1001, 45, "张三");
pp[2] = new Person(1045, 34, "李四");
pp[3] = new Person(1263, 76, "麻六");
Arrays.sort(pp);
for (int i = 0; i < 4; i++) {
System.out.println(pp[i]);
}
}
}
============
1、你用treeset,那它就不会调用compareTo方法进行排序,只会使用toString()。
也就是说你不用实现Camparable接口,也不用写compareTo方法就能排序!!
2、你如果想用compareTo方法进行排序,那你就要用我给你方法去测试!!
Arrays.sort(pp);这个才能调用compareTo方法进行排序。
3、估计你只看了下代码,根本没试,你试了之后就不会问这种问题了
TreeSet会自动给填进去的数据排序。
由于你扔进的是一个对象的,他会调用对象的toString()方法去排序。
你又重写的toString()方法,所以就根据你toString()中返回的字符串进行排序....
compareTo方法你再咋折腾也没用,因为就没调用哪个
===================
避免你再问,告诉你咋调用那个方法: 我给你改了测试类
你这样再改改试试,你还会说都一样?
import java.util.Arrays;
public class TestComparable {
public static void main(String[] args) {
Person [] pp = new Person[4];
pp[0] = new Person(1123, 32, "王五");
pp[1] = new Person(1001, 45, "张三");
pp[2] = new Person(1045, 34, "李四");
pp[3] = new Person(1263, 76, "麻六");
Arrays.sort(pp);
for (int i = 0; i < 4; i++) {
System.out.println(pp[i]);
}
}
}
============
1、你用treeset,那它就不会调用compareTo方法进行排序,只会使用toString()。
也就是说你不用实现Camparable接口,也不用写compareTo方法就能排序!!
2、你如果想用compareTo方法进行排序,那你就要用我给你方法去测试!!
Arrays.sort(pp);这个才能调用compareTo方法进行排序。
3、估计你只看了下代码,根本没试,你试了之后就不会问这种问题了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯