TreeSet 的 compareTo 返回值问题

1.返回 1 那么当前的值会排在 被比较者 后面。

2.返回 0 那么当前的值【不会被加入到 TreeSet 中】,因为当前的值【被认为是跟现有的某一个值相等】。

3.返回 -1 会被添加到 被比较者 的前边。


因此:在使用 TreeSet 的时候,首先要弄明白要【按照哪一个字段进行排序】,其次如果对象【需要去重的话】要弄【明白按哪一个字段进行去重】。


例子:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.dada.data;  
  2.   
  3.   
  4. public class Student {  
  5.     private int id;  
  6.     private String name;  
  7.     private int score;  
  8.     public int getId() {  
  9.         return id;  
  10.     }  
  11.     public void setId(int id) {  
  12.         this.id = id;  
  13.     }  
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.     public void setName(String name) {  
  18.         this.name = name;  
  19.     }  
  20.       
  21.       
  22.       
  23.     public int getScore() {  
  24.         return score;  
  25.     }  
  26.     public void setScore(int score) {  
  27.         this.score = score;  
  28.     }  
  29.     public int compareTo(Object obj) {  
  30.         int r = 0;  
  31.         // 判断是不是 学生类型  
  32.         if (obj instanceof Student) {  
  33.             Student ss = (Student) obj;  
  34.             // 判断是不是同一个对象(按照姓名进行判断),不是的话就把它加入进来,否则就不加入  
  35.             if (ss.getName().equals(this.getName())) {  
  36.                 // 如果不是同一个学生,那么就可以根据分数对他们进行排序了  
  37.                 if (ss.getScore() >= this.getScore()) {  
  38.                     r = -1;  
  39.                 } else {  
  40.                     r = 1;  
  41.                 }  
  42.             } else {  
  43.                 r = 0;  
  44.             }  
  45.               
  46.         // 不是学生类型对象的话就不要加入它  
  47.         } else {  
  48.             r = 0;  
  49.         }  
  50.         return r;  
  51.     }  
  52. }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TreeSet是一个有序的集合,它可以根据元素的自然顺序或者指定的比较器进行排序。在使用TreeSet时,需要实现Comparable接口或者传入一个Comparator对象来指定排序规则。 如果要重写compareTo方法,需要注意以下几点: 1. compareTo方法的返回值应该是一个整数,表示当前对象与另一个对象的大小关系。如果当前对象小于另一个对象,返回负数;如果当前对象等于另一个对象,返回;如果当前对象大于另一个对象,返回正数。 2. compareTo方法应该与equals方法保持一致,即如果两个对象相等,它们的compareTo方法应该返回。 3. compareTo方法应该是可传递的,即如果a.compareTo(b)返回负数,b.compareTo(c)返回负数,那么a.compareTo(c)也应该返回负数。 4. compareTo方法应该是可反转的,即如果a.compareTo(b)返回正数,那么b.compareTo(a)应该返回负数。 下面是一个示例代码,演示如何重写compareTo方法: ``` public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Person o) { if (this.age < o.age) { return -1; } else if (this.age > o.age) { return 1; } else { return this.name.compareTo(o.name); } } } ``` 在这个示例中,我们定义了一个Person类,它有两个属性:name和age。我们希望按照年龄从小到大排序,如果年龄相同,则按照姓名的字典序排序。因此,我们在compareTo方法中先比较年龄,如果年龄不同,直接返回年龄的大小关系;如果年龄相同,再比较姓名的字典序。这样,我们就可以使用TreeSet来对Person对象进行排序了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值