日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

十三、实现Comparable接口和new ComparatorT(){ }排序的实现过程

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十三、实现Comparable接口和new ComparatorT(){ }排序的实现过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:https://www.cnblogs.com/igoodful/p/9517784.html


?

Collections有兩種比較規則方式,第一種是使用自身的比較規則:

該類必須實現Comparable接口并重寫comparTo方法。

this可以想象為1,傳入對象o想象為2,返回1-2即按升序排序。返回2-1即按降序排序。

1、首先編寫一個實現Comparable接口的實體類

1 package com.abc; 2 //Comparable接口后面一定要加上需要比較的數據類型 3 public class Person implements Comparable<Person>{ 4 5 private String name; 6 private int age; 7 private int salary; 8 9 public Person() { 10 } 11 12 public Person(String name, int age, int salary) { 13 this.name = name; 14 this.age = age; 15 this.salary = salary; 16 } 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 public int getAge() { 27 return age; 28 } 29 30 public void setAge(int age) { 31 this.age = age; 32 } 33 34 public int getSalary() { 35 return salary; 36 } 37 38 public void setSalary(int salary) { 39 this.salary = salary; 40 } 41 42 @Override 43 public String toString() { 44 return "Person{" + 45 "name='" + name + '\'' + 46 ", age=" + age + 47 ", salary=" + salary + 48 '}'; 49 } 50 51 //自身定義年齡升序 52 @Override 53 public int compareTo(Person o) { 54 return this.age-o.age; 55 } 56 }

?2、編寫測試代碼

package com.abc;import java.util.ArrayList; import java.util.Collections; import java.util.List;public class PersonTest {public static void main(String[] args){List<Person> people = new ArrayList<>();people.add(new Person("AAA",20,100));people.add(new Person("BBB",18,109));people.add(new Person("CCC",30,58));System.out.println(people);Collections.sort(people);System.out.println(people);} }

3、運行結果

[Person{name='AAA', age=20, salary=100}, Person{name='BBB', age=18, salary=109}, Person{name='CCC', age=30, salary=58}]
//完成了年齡的升序排列 [Person{name='BBB', age=18, salary=109}, Person{name='AAA', age=20, salary=100}, Person{name='CCC', age=30, salary=58}]

?

?


?

第二個參數為比較器,可以使用它來定義針對集合排序時的比較元素大小的規則。

使用這種方式時,sort方法不要求集合元素必須實現Comparable接口了,因為不會使用元素自身的比較規則

1、編寫一個普通的實體類,不需要實現任何接口

package com.abcd;public class Person{private String name;private int age;private int salary;public Person() {}public Person(String name, int age, int salary) {this.name = name;this.age = age;this.salary = salary;}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 int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", salary=" + salary +'}';}}

2、編寫測試代碼

package com.abcd;import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List;public class PersonTest {public static void main(String[] args){List<Person> people = new ArrayList<>();people.add(new Person("AAA",20,100));people.add(new Person("BBB",18,109));people.add(new Person("CCC",30,58));System.out.println(people);
     //排序規則 salary降序Collections.sort(people, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {return o2.getSalary()- o1.getSalary();}});System.out.println(people);} }

3、運行結果

[Person{name='AAA', age=20, salary=100}, Person{name='BBB', age=18, salary=109}, Person{name='CCC', age=30, salary=58}] [Person{name='BBB', age=18, salary=109}, Person{name='AAA', age=20, salary=100}, Person{name='CCC', age=30, salary=58}]

  

總結

總結一下,兩種比較器Comparable和Comparator,后者相比前者有如下優點:

1、如果實現類沒有實現Comparable接口,又想對兩個類進行比較(或者實現類實現了Comparable接口,但是對compareTo方法內的比較算法不滿意),那么可以實現Comparator接口,自定義一個比較器,寫比較算法

2、實現Comparable接口的方式比實現Comparator接口的耦合性 要強一些,如果要修改比較算法,要修改Comparable接口的實現類,而實現Comparator的類是在外部進行比較的,不需要對實現類有任何修 改。從這個角度說,其實有些不太好,尤其在我們將實現類的.class文件打成一個.jar文件提供給開發者使用的時候。實際上實現Comparator 接口的方式后面會寫到就是一種典型的策略模式

當然,這不是鼓勵用Comparator,意思是開發者還是要在具體場景下選擇最合適的那種比較器而已。

?

轉載于:https://www.cnblogs.com/mason117/p/10646382.html

總結

以上是生活随笔為你收集整理的十三、实现Comparable接口和new ComparatorT(){ }排序的实现过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。