TreeSet ------自然排序與定製排序(比較器)
阿新 • • 發佈:2018-12-16
前言: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類裡面比較方法就可以.
packageTreeSet; 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,小於返回-1Student 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>]