1. 程式人生 > >TreeSet ------自然排序與定製排序(比較器)

TreeSet ------自然排序與定製排序(比較器)

前言:TreeSet集合是Set集合的一個子實現類,它是基於TreeMap中的NavigableSet介面實現的,TreeSet集合是預設通過自然排序將集合中的元素進行排序

  TreeSet有兩種排序方式:

  1)自然排序

  2)比較器排序

 

1. 自然排序:

  在TreeSet中預設要求裡面的元素進行自然排序,強制要求裡面的所有元素必須按照Comparable中的compareTo方法進行比較。

  如果容器裡面的物件不具備compareTo方法此時就會丟擲異常報錯,所以必須要讓容器中的元素實現Comparable介面,這樣它才具備compareTo方法。

    1.TreeSet例項在呼叫

add方法時會呼叫容器物件的compareTo方法對元素進行比較

    2.TreeSet例項中物件必須是實現了Comparable介面

 

例如:比較Student學生類,應該從哪些方法進行比較?

一般從欄位的方面進行比較;比如按照年齡比較;當年齡相等返回0,大於返回1,小於返回-1

姓名是字串,怎樣比較大小,檢視api的時候,String已經實現了Comparable介面,String 類裡面已經肯定覆寫Comparable方法,那是按照String的規則進行比較。

可以直接不管具體內 部是怎樣比較,直接呼叫String類裡面比較方法就可以.

 

package
TreeSet; public class Student implements Comparable { private int age; private String name; public Student(){} public Student(int age,String name){ this.age = age; this.name = name; } @Override public int compareTo(Object obj) { //比如按照年齡比較;當年齡相等返回0,大於返回1,小於返回-1
Student stu = (Student)obj; if(this.age > stu.age){ return 1; }else if(this.age<stu.age){ return -1; }else{ return this.name.compareTo(stu.name); } } @Override public String toString() { return "<" + age + ", " + name + ">"; } }

 

public class TestStudent {
    public static void main(String[] args) {
        
        TreeSet set = new TreeSet();
        set.add(new Student(20, "zs"));
        set.add(new Student(21, "zs"));
        set.add(new Student(22, "ww"));
        set.add(new Student(23, "zl"));
        System.out.println(set);
    }
}
//結果:[<20, zs>, <21, zs>, <22, ww>, <23, zl>]