總結(jié)
- TreeSet 是 SortedSet 接口的實現(xiàn)類,TreeSet 可以確保集合元素處于排序狀態(tài)。
- TreeSet 支持兩種排序方法:自然排序和定制排序。默認(rèn)情況下,TreeSet 采用自然排序。
自然排序
排序:TreeSet 會調(diào)用集合元素的 compareTo(Object obj) 方法來比較元素之間的大小關(guān)系,然后將集合元素按升序排列
如果 this > obj,返回正數(shù) 1
如果 this < obj,返回負(fù)數(shù) -1
如果 this = obj,返回 0 ,則認(rèn)為這兩個對象相等
必須放入同樣類的對象.(默認(rèn)會進行排序) 否則可能會發(fā)生類型轉(zhuǎn)換異常.我們可以使用泛型來進行限制
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<Integer>();
//添加元素
set.add(10);
set.add(4);
set.add(99);
set.add(66);
//移除元素
set.remove(1);
//是否包含某種元素
set.contains(99);
//TreeSet自然排序
System.out.println(set);
//使用迭代器遍歷集合
Iterator<Integer> st = set.iterator();
while(st.hasNext()) {
System.out.println(st.next());
}
//使用for each迭代集合
for(Integer i :set) {
System.out.println(i);
}
}
定制排序
如果需要實現(xiàn)定制排序,則需要在創(chuàng)建 TreeSet 集合對象時,提供一個 Comparator 接口的實現(xiàn)類對象。由該 Comparator 對象負(fù)責(zé)集合元素的排序邏輯
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
/**
* 定制排序
* 如果需要實現(xiàn)定制排序,則需要在創(chuàng)建 TreeSet 集合對象時,
* 提供一個 Comparator 接口的實現(xiàn)類對象。
* 由該 Comparator 對象負(fù)責(zé)集合元素的排序邏輯
*/
Person p5 = new Person(111,"李四");
Person p1 = new Person(13,"張三");
Person p2 = new Person(9,"王二");
Person p3 = new Person(101,"李逵");
Person p4 = new Person(111,"李某人");
//創(chuàng)建一個person對象的泛型集合
Set<Person> p = new TreeSet<Person>(new Person());
//將對象加入集合
p.add(p1);
p.add(p2);
p.add(p3);
p.add(p4);
p.add(p5);
//for each遍歷集合
for(Person set1:p) {
System.out.println(set1.age " " set1.name);
}
}
}
//實現(xiàn)Comparator接口
class Person implements Comparator<Person>{
int age;
String name;
//定義一個無參構(gòu)造和有參構(gòu)造
Person() {}
Person(int age,String name){
this.name = name;
this.age = age;
}
//重寫compare方法,自定義排序方式
@Override
public int compare(Person o1, Person o2) {
if(o1.age>o2.age) {
return 1;
}else if(o1.age<o2.age) {
return -1;
}
return 0;
}}
來源:https://www./content-1-591701.html
|