码迷,mamicode.com
首页 > 其他好文 > 详细

Comparable接口的compareTo()方法

时间:2018-02-18 19:28:55      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:ros   pac   public   返回值   blog   class   gpo   原因   rabl   

【代码】

 1 package com.hxl;
 2 
 3 public class Student implements Comparable<Student> {
 4 
 5     private String name;
 6     private int age;
 7 
 8     public Student() {
 9         super();
10     }
11 
12     public Student(String name, int age) {
13         super();
14         this.name = name;
15         this.age = age;
16     }
17 
18     public String getName() {
19         return name;
20     }
21 
22     public void setName(String name) {
23         this.name = name;
24     }
25 
26     public int getAge() {
27         return age;
28     }
29 
30     public void setAge(int age) {
31         this.age = age;
32     }
33 
34     @Override
35     public int compareTo(Student s) {
36         // 先让两个对象的age属性做差比较,这个是主要排序条件
37         int num = this.age - s.age;
38         // 若age属性相同,再比较name属性(String类本身实现了Comparable接口)
39         // 即在主要排序条件相同的情况下,次要排序条件起作用
40         int flag = num == 0 ? this.name.compareTo(s.name) : num;
41         // 返回比较结果
42         return flag;
43     }
44 }
 1 package com.hxl;
 2 
 3 import java.util.TreeSet;
 4 
 5 public class Test {
 6     public static void main(String[] args) {
 7         TreeSet<Student> ts = new TreeSet<Student>();
 8         ts.add(new Student("cc", 11));
 9         ts.add(new Student("ee", 11));
10         ts.add(new Student("cc", 22));
11         ts.add(new Student("aa", 22));
12         ts.add(new Student("bb", 11));
13 
14         for (Student s : ts) {
15             System.out.println(s.getName()+"_"+s.getAge());
16         }
17 
18         /*
19             为什么TreeSet集合中的元素既唯一又有序呢?
20             原因是它在存储元素的时候就是有序存储的(红黑树结构存储)
21             TreeSet的add()方法底层依赖的是Comparable的compareTo方法
22             这里就是说元素类本身要有自己的compareTo方法
23             所以元素类本身必须实现Comparable接口,重写compareTo方法
24             compareTo方法有个特点:它返回的是int型数据,结果有三类负数、0、正数
25             例如:(Java中一些常见的有比较意义的一些类都实现了Comparable接口,如Integer类)
26                 Integer a = new Integer(10);
27                 Integer b = new Integer(20);
28                 int num = a.compareTo(b);     //因为a小于b,所以num返回的是负数
29             而TreeSet的add()方法这样理解此返回值:
30             即返回负数则比根节点小,元素在此集合中唯一,元素存放根的左孩子
31             返回正数则比根节点大,元素在此集合中唯一,元素存放根的右孩子
32             返回0则表示,元素相同,在此集合中不唯一,故而丢掉不存放
33             由此可见,我们的重写的compareTo()方法决定了TreeSet集合中元素的去留和顺序!
34         */
35     }
36 }

 

Comparable接口的compareTo()方法

标签:ros   pac   public   返回值   blog   class   gpo   原因   rabl   

原文地址:https://www.cnblogs.com/schiller-hu/p/8453039.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!