TreeSet 的 compareTo 返回值问题

来源:互联网 发布:数据分析是做什么的 编辑:程序博客网 时间:2024/05/21 02:35

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 0
原创粉丝点击