TreeSet
注意:TreeSet在添加元素時進(jìn)行排序,數(shù)據(jù)更改不會影響原來的順序。使用過程中最好不要改變其元素內(nèi)容,可能會導(dǎo)致內(nèi)容重復(fù)。為避免重復(fù)可以將元素類內(nèi)部屬性定義為final常量,就不能修改了。
- 數(shù)據(jù)元素可以排序且不可重復(fù)
因?yàn)門reeSet也是實(shí)現(xiàn)了Set接口的實(shí)體類,而Set接口中元素不可重復(fù)。 - HashSet與TreeSet對比
HashSet中的元素必須重寫hashcode和equals方法,用來去重,而TreeSet因?yàn)樵乜梢耘判?,即定義了排序規(guī)則就可以通過比較,結(jié)果為0則表示重復(fù)了。 - 對于兩種不同的排序定義實(shí)現(xiàn)選擇不同的構(gòu)造器
- Comparable選擇
new TreeSet(); - Comparator選擇
new TreeSet(Comparator<? super E> comparator);
TreeSet應(yīng)用示例
很簡單,繼續(xù)使用上面的Person類,因?yàn)樵诖娣艜r就已經(jīng)排序了,直接輸出即可查看排序后的內(nèi)容
- Comparator接口定義的類的排序
public class Demo1 {
public static void main(String[] args) {
TreeSet<Person> list=new TreeSet<>(new PersonHandsomSort());
list.add(new Person("張學(xué)友",105));
list.add(new Person("劉德華", 100));
list.add(new Person("Viking",300));
System.out.println(list);
}
}
- 實(shí)現(xiàn)Compareble接口的自定義類的排序
public class Demo1 {
public static void main(String[] args) {
//直接調(diào)用空構(gòu)造器
TreeSet<Person> list=new TreeSet<>();
list.add(new Person("張學(xué)友",105));
list.add(new Person("劉德華", 100));
list.add(new Person("Viking",300));
System.out.println(list);
}
}
TreeMap
TreeMap與TreeSet的使用類似。
TreeMap要求鍵是可以排序的,上面的Person類可以直接當(dāng)做值來排序,鍵隨便放點(diǎn)什么就好了。
- Comparator接口
public class Demo1 {
public static void main(String[] args) {
TreeMap<Person, String> map=new TreeMap<>(new PersonHandsomSort());
Person p1=new Person("張學(xué)友",105);
Person p2=new Person("劉德華", 100);
Person p3=new Person("Viking",300);
map.put(p1, "123");
map.put(p2, "123");
map.put(p3, "123");
//利用map的KeySet方法,得到存放鍵的數(shù)組,即Person的數(shù)組,再打印
Set<Person> persons=map.keySet();
System.out.println(persons);
}
}
- Comparable接口類似,不再重復(fù)