關於Comparable介面和Comparetor介面的兩種排序
阿新 • • 發佈:2018-12-18
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; } }