1. 程式人生 > >關於Comparable介面和Comparetor介面的兩種排序

關於Comparable介面和Comparetor介面的兩種排序

Comparable介面

TreeSet:實現去重和排序的方式:1.讓元素去實現Comparable介面,重寫compareTo方法

public class Demo {
	public static void main(String[] args) {
		// TreeSet:實現去重和排序的方式:
		//1.讓元素去實現Comparable介面,重寫compareTo方法------預設排序
		//學習第一種
		//1.讓元素去實現Comparable介面,重寫compareTo方法------預設排序
		TreeSet set = new TreeSet<>();
		//使用TreeSet在儲存字串的時候自動實現了排序和去重
		//因為在add方法中呼叫了Comparable介面的compareTo方法
		//預設是按照升序字典順序排序
		set.add("java1");
		set.add("java4");
		set.add("java2");
		set.add("java5");
		set.add("java2");
		System.out.println(set);
		
		//例項:將Person2的物件存入TreeSet,按照姓名和年齡比較
		TreeSet<Person2> set1 = new TreeSet<>();
		set1.add(new Person2("bingbing1", 18));
		set1.add(new Person2("bingbing2", 18));
		set1.add(new Person2("bingbing3", 183));
		set1.add(new Person2("bingbing3", 183));
		set1.add(new Person2("bingbing0", 17));
		System.out.println(set1);
	}
}

//自定義的類實現Comparable介面
class Person2 implements Comparable<Person2>{
	String name;
	int age;
	public Person2(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person2 [name=" + name + ", age=" + age + "]";
	}
	
	@Override
	//自己制定的規則:按照年齡和姓名比較
	/*
	 *返回正數,代表前面的比後面的大
	 *返回0,代表前後相等
	 *返回負數,代表前面的比後面的小
	 */
	public int compareTo(Person2 person2) {

		//先按照年齡比較,年齡相同再去比姓名
		int num = this.age-person2.age;
		return num==0?name.compareTo(person2.name):num;
	}
}


Comparetor介面

比較器類,讓他實現Comparetor介面,重寫compare方法,再將比較器物件作用於TreeSet,內部的元素會按照比較器進行比較.—人工排序

public class Demo11 {
	public static void main(String[] args) {
		//第二種
		
		//2.建立比較器物件,並指定給儲存元素的TreeSet
		ComWithLength comWithLength = new ComWithLength();
		
		TreeSet set = new TreeSet<>(comWithLength);
		//使用TreeSet在儲存字串的時候自動實現了排序和去重
		
		set.add("java1111111111111");
		set.add("java422");
		set.add("java2456");
		set.add("java523535");
		set.add("java2456");
		System.out.println(set);
	}
}

//1.建立比較器類
class ComWithLength implements Comparator<String>{
	public int compare(String s1, String s2) {
	
		//要求按照字串的長度對字串進行排序--從短到長,當長度相同的時候,按照字典排序
		int num = s1.length()-s2.length();
		return num==0?s1.compareTo(s2):num;
	}
}