Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)

1. 自然排序:

TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序。

Java中提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现该接口的类的对象就可以比较大小。

当一个对象调用该方法(compareToObject obj))与另一个对象进行比较的时候,例如obj1.compareTo(obj2),如果该方法返回0,则表明这两个对象相等;如果该方法返回一个正整数,则表明obj1大于obj2;如果该方法返回一个负整数,则表明obj1小于obj2

 

2. TreeSet存储自定义对象并遍历练习1(自然排序):

(1)Student.java:

 1 package cn.itcast_05;
 2 
 3 /*
 4  * 如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口
 5  */
 6 public class Student implements Comparable<Student> {
 7     private String name;
 8     private int age;
 9 
10     public Student() {
11         super();
12     }
13 
14     public Student(String name, int age) {
15         super();
16         this.name = name;
17         this.age = age;
18     }
19 
20     public String getName() {
21         return name;
22     }
23 
24     public void setName(String name) {
25         this.name = name;
26     }
27 
28     public int getAge() {
29         return age;
30     }
31 
32     public void setAge(int age) {
33         this.age = age;
34     }
35 
36     @Override
37     public int compareTo(Student s) {
38         // return 0;
39         // return 1;
40         // return -1;
41 
42         // 这里返回什么,其实应该根据我的排序规则来做
43         // 按照年龄排序,主要条件
44         int num = this.age - s.age;
45         // 次要条件
46         // 年龄相同的时候,还得去看姓名是否也相同
47         // 如果年龄和姓名都相同,才是同一个元素
48         int num2 = num == 0 ? this.name.compareTo(s.name) : num;
49         return num2;
50     }
51 }

 

(2)测试类TreeSetDemo2.java:

 1 package cn.itcast_05;
 2 
 3 import java.util.TreeSet;
 4 
 5 /*
 6  * TreeSet存储自定义对象并保证排序和唯一。
 7  * 
 8  * A:你没有告诉我们怎么排序
 9  *         自然排序,按照年龄从小到大排序
10  * B:元素什么情况算唯一你也没告诉我
11  *         成员变量值都相同即为同一个元素
12  */
13 public class TreeSetDemo2 {
14     public static void main(String[] args) {
15         // 创建集合对象
16         TreeSet<Student> ts = new TreeSet<Student>();
17 
18         // 创建元素
19         Student s1 = new Student("linqingxia", 27);
20         Student s2 = new Student("zhangguorong", 29);
21         Student s3 = new Student("wanglihong", 23);
22         Student s4 = new Student("linqingxia", 27);
23         Student s5 = new Student("liushishi", 22);
24         Student s6 = new Student("wuqilong", 40);
25         Student s7 = new Student("fengqingy", 22);
26 
27         // 添加元素
28         ts.add(s1);
29         ts.add(s2);
30         ts.add(s3);
31         ts.add(s4);
32         ts.add(s5);
33         ts.add(s6);
34         ts.add(s7);
35 
36         // 遍历
37         for (Student s : ts) {
38             System.out.println(s.getName() + "---" + s.getAge());
39         }
40     }
41 }

运行效果,如下:

posted on 2015-10-06 21:19  鸿钧老祖  阅读(279)  评论(0编辑  收藏  举报

导航