java treeset类的排序规则_180217_JAVA学习_TreeSet中存放含多个String的类并设置排序规则...

有Person类如下:

1 classPerson {2   String name;3   intage;4   String address;5 }

有main如下:

1 importjava.util.TreeSet;2

3 public classTest{4   public static voidmain(String[] args){5     Person p1 = new Person("AA",18,"CN");6     Person p2 = new Person("BB",18,"JP");7     Person p3 = new Person("CC",18,"CN");8

9     TreeSet persons = new TreeSet<>();10 persons.add(p1);11 persons.add(p2);12 persons.add(p3);13     for(Object person : persons) {14 System.out.println(person);15 }16 }17 }

由于TreeSet为可排序集合,所以要为存放对象(Person)指定排序规则。

排序规则:ASC(升序),age > address > name

故重写Person的compareTo():

1 public intcompareTo(Person o) {2 if(this.age >o.age){3 return 1;4 }else if(this.age

8 int x = this.address.compareTo(o.address);9 if(x != 0){10 returnx;11 }12 //判断address谁大,若相等,则判断name

13 return this.name.compareTo(o.name);14 }

注:若要DESC排序:

1、age比较中交换1/-1;

2、address比较中return相反数值;

3、name比较中return相反数值;

上述代码的逻辑顺序:

传入比较对象o与自身进行对比;

若this.age > o.age,返回“1”;

若this.age < o.age,返回“-1”;

若相等,比较address;

令x = this.address.compareTo(o.address);

若x != 0,即不相等,x即为要返回的值(1/-1);

若x == 0,即相等,比较name;

this.name.compareTo(o.name)的值即为要返回的值:

若值为 1,即大于,

若值为-1,即为小于,

若值为 0,即三处均相等,则完全相等,不应存入。

完整代码:

1 packagetoBKY;2

3 importjava.util.TreeSet;4

5 public classTest{6 public static voidmain(String[] args){7 Person p1 = new Person("AA",18,"CN");8 Person p2 = new Person("BB",18,"JP");9 Person p3 = new Person("CC",18,"CN");10

11 TreeSet persons = new TreeSet<>();12 persons.add(p1);13 persons.add(p2);14 persons.add(p3);15

16 for(Object person : persons) {17 System.out.println(person);18 }19 //使用for each 比Iterator代码量少

20

21 }22 }23

24 class Person implements Comparable{25 String name;26 intage;27 String address;28

29 public Person(String name, intage, String address) {30 this.name =name;31 this.age =age;32 this.address =address;33 }34

35 @Override36 publicString toString() {37 return "Person{" +

38 "name='" + name + '\'' +

39 ", age=" + age +

40 ", address='" + address + '\'' +

41     '}';42   }43

44   @Override45   public intcompareTo(Person o) {46     if(this.age >o.age){47       return 1;48     }else if(this.age

52     int x = this.address.compareTo(o.address);53     if(x != 0){54       returnx;55     }56     //判断address谁大,若相等,则判断name

57     return this.name.compareTo(o.name);58   }59 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值