TreeSet集合實(shí)現(xiàn)了SortedSet接口, 可以對(duì)集合中元素進(jìn)行自然排序, 要求集合中的元素必須是可比較的。
package com.wkcto.chapter05.set;
import java.util.Comparator;
import java.util.TreeSet;
/**
* TreeSet集合
* 可以對(duì)元素進(jìn)行自然排序, 要求元素必須是可比較的
* 1)創(chuàng)建TreeSet集合時(shí),通過構(gòu)造方法指定Comparator比較器
* 2)如果沒有指定Comparator比較器, 要求元素的類必須實(shí)現(xiàn)Comparable接口
* @author 蛙課網(wǎng)
*
*/
public class Test03 {
public static void main(String[] args) {
//1) 創(chuàng)建TreeSet集合,存儲(chǔ)Person對(duì)象, 在構(gòu)造方法中指定Comparator比較器,按姓名升序排序
TreeSet<Person> treeSet = new TreeSet<>(new Comparator<Person>() {
//在匿名內(nèi)部類中重寫接口的抽象方法
@Override
public int compare(Person o1, Person o2) {
//指定一個(gè)比較規(guī)則
return o1.name.compareTo(o2.name); //姓名升序
}
});
//2)添加元素
treeSet.add(new Person("lisi", 18));
treeSet.add(new Person("feifei", 28));
treeSet.add(new Person("yong", 35));
treeSet.add(new Person("bin", 36));
treeSet.add(new Person("zhang", 33));
//3)直接打印
System.out.println( treeSet );
//4) 根據(jù)已有TreeSet創(chuàng)建新的TreeSet集合
TreeSet<Person> treeSet22 = new TreeSet<>(treeSet);
System.out.println( treeSet22 );
//5) 使用TreeSet的無參構(gòu)造, 沒有指定Comparator比較器, 要求Person類實(shí)現(xiàn)Comparable接口
TreeSet<Person> treeSet33 = new TreeSet<>();
treeSet33.addAll(treeSet);
System.out.println( treeSet33);
}
}
TreeSet集合底層是TreeMap,向TreeSet集合添加元素,實(shí)際上是把該元素作為鍵添加到了底層TreeMap中,TreeSet集合實(shí)際上就是底層TreeMap的鍵的集合。
package com.wkcto.chapter05.set;
import java.util.Comparator;
import java.util.TreeSet;
/**
* 注意:
* 在TreeSet集合中, 是根據(jù)Comparator/Comparable的比較結(jié)果是否為0來判斷是否為同一個(gè)對(duì)象
* 如果Comparator的compare()方法/Comparable的compareTo()方法的返回值為0 就認(rèn)為是同一個(gè)對(duì)象
* @author 蛙課網(wǎng)
*
*/
public class Test04 {
public static void main(String[] args) {
//創(chuàng)建TreeSet集合,存儲(chǔ)Person對(duì)象, 通過構(gòu)造方法指定Comparator比較器,按年齡降序排序
TreeSet<Person> treeSet = new TreeSet<>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o2.age - o1.age;
}
});
//當(dāng)前treeSet是根據(jù)年齡比較Person大小的, 在添加Person對(duì)象時(shí), 如果年齡相同就認(rèn)為是同一個(gè)對(duì)象
treeSet.add(new Person("lisi", 18));
treeSet.add(new Person("feifei", 18));
treeSet.add(new Person("zhang", 18));
treeSet.add(new Person("yong", 18));
System.out.println( treeSet.size() ); // 1
System.out.println( treeSet );
System.out.println( treeSet.contains( new Person("wang", 18))); //true
}
}