1. 程式人生 > >Java——Set集合(介面)(二)___TreeSet用法

Java——Set集合(介面)(二)___TreeSet用法

Set(介面)集合:          TreeSet類(底層是二叉樹),能保證有序,用來對元素進行排序,能保證元素的唯一          使用方式:          1.自然順序:TreeSet類的add()方法中會把存入的物件提升為Comparable型別                   呼叫物件的compareTo()方法和集合中的物件比較                   根據compareTo()方法返回的結果進行儲存          2.比較器順序:建立TreeSet的時候可以制定一個Comparator                         如果傳入Comparator的子類物件,那麼TreeSet就會按照比較器中的順序排序                     add()方法內部會自動呼叫Comparator介面中compare()方法排序                         呼叫的物件是compare方法的第一個引數,集合中的物件是compare方法的第二個引數          3.TreeSet建構函式什麼都不傳,預設按照類中Comparable的順序            TreeSet如果傳入Comparator,就優先按照Comparator

package pra_12;
import java.util.Comparator;
import java.util.TreeSet;
public class J_24 {
	public static void main(String[] args) {
		//1.TreeSet儲存Integer型別得元素並進行遍歷(按照數值大小比較)
		TreeSet<Integer> ts=new TreeSet<>();
		ts.add(1);
		ts.add(1);
		ts.add(2);
		ts.add(2);
		ts.add(3);
		System.out.println(ts); 	//[1, 2, 3]
		//2.儲存自定義物件
		//需要People5實現Comparable介面,並重寫comparaTo方法
		//當comparaTo方法返回0的時候集合中只有一個元素
		//當返回正數的時候集合會怎麼存怎麼取
		//當返回是負數的時候集合會倒序儲存
		TreeSet<People5> ts2=new TreeSet<>();
		ts2.add(new People5("aa",11));
		ts2.add(new People5("bb",22));
		ts2.add(new People5("bb",22));
		ts2.add(new People5("aa",11));
		ts2.add(new People5("vv",33));
		ts2.add(new People5("ff",44));
		ts2.add(new People5("gg",44));
		System.out.println(ts2);
		//3.比較器排序.將字串按照長度排序
		/*
		 TreeSet(Comparator<? super E> comparator) 
                      構造一個新的空 TreeSet,它根據指定比較器進行排序。
		 */
		TreeSet<String> ts3=new TreeSet<>(new Comp());	//Comparator com=new Comp();
		ts3.add("aa");
		ts3.add("b");
		ts3.add("aaa");
		ts3.add("aaaaa");
		System.out.println(ts3);
	}
}
class People5 implements Comparable<People5>{
	
	private String name;
	private int age;
	public People5() {
		super();	
	}
	public People5(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String toString() {
		return "People [name=" + name + ", age=" + age + "]";
	}
	//重寫的方法在這!!!
	@Override
	public int compareTo(People5 o) {
		int number=this.age-o.age;		//按照年齡排序
		return number==0?this.name.compareTo(o.name):number;
	}
}
//實現類的繼承在這!!!
class Comp implements Comparator<String>{
	@Override
	public int compare(String o1, String o2) {	//按照字串的長度比較
		int num=o1.length()-o2.length();
		return num==0?o1.compareTo(o2):num;
	}
	 
}