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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ArrayList实现自定义排序

發布時間:2024/1/1 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArrayList实现自定义排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ArrayList 是一種 List 實現,它的內部用一個動態數組來存儲元素,因此 ArrayList 能夠在添加和移除元素的時候進行動態的擴展和縮減。

字符串排序

ArrayList中存儲的是String類型的數據,在對這個 ArrayList 進行排序,你需要調用 Collections.sort()方法

public class SortArrayListAscDes {private ArrayList arrayList;public SortArrayListAscDes(ArrayList arrayList) {this.arrayList = arrayList;}public ArrayList getArrayList() {return arrayList;}public ArrayList sortAscending(){ //升序排序方法Collections.sort(this.arrayList);return this.arrayList;}public ArrayList sortDescending(){ //降序排序方法Collections.sort(this.arrayList,Collections.reverseOrder());return this.arrayList;} } /*--------------Test---------------------*/ public static void main(String[] args) {ArrayList stringArrayListist = new ArrayList<>();stringArrayListist.add("Itlay");stringArrayListist.add("China");stringArrayListist.add("America");stringArrayListist.add("Russian");SortArrayListAscDes sortArrayListAscDes = new SortArrayListAscDes(stringArrayListist);System.out.println("沒有經過排序的數組: "+stringArrayListist);System.out.println("升序排序: "+ sortArrayListAscDes.sortAscending());System.out.println("降序排序: "+ sortArrayListAscDes.sortDescending());}

在 sortDescending()方法中,我們調用重載的 Collections.sort()方法讓其按照降序對元素排序,這個版本的 Collections.sort()接收ArrayList對象作為第一個參數,一個由 Collections.reverseOrder()方法返回的 Comparator 對象作為第二個參數。reverseOrder 指的是逆序。

Collections.sort() 方法對 ArrayList 的元素或者任何其他 List 的實現提供的可比較的元素進行排序,這意味著這些元素的類需要實現 Java.lang 包中的 Comparable 接口。正如 String 類實現了Comparable接口,Integer、Short、Double、Float、Boolean、BigInteger、BigDecimal、File 和 Date 類也都實現了Comparable接口。

使用Comparable排序

Comparable 是帶有單一 compareTo()方法的接口。一個實現了 Comparable 接口的類對象可以與其它同類型的對象進行比較,實現 Comparable 接口的類需要重寫 compareTo()方法,這個方法接收一個同類型的對象,并實現這個對象和傳遞給方法的另一個對象比較的邏輯。

public class Student implements Comparable<Student>,Serializable{private String name;private String number;private float score1;private float score2;private float score3;private float totlescore;public Student() {}public Student(String name, String number, float score1, float score2, float score3) {this.name = name;this.number = number;this.score1 = score1;this.score2 = score2;this.score3 = score3;this.totlescore = score1 + score2 + score3;}//按學生總分的降序排列@Overridepublic int compareTo(Student o) {return (this.totlescore > o.totlescore ? -1 : (this.totlescore == o.totlescore ? 0 : 1));} } public class saveStudent {public List<Student> sortStudent(List<Student> sortlist){Collections.sort(sortlist);return sortlist;} }

使用 Comparator 排序

public class JobCandidate {private String name;private String gender;private int age;public JobCandidate(String name, String gender, int age) {this.name = name;this.gender = gender;this.age = age;}//匿名內部類public static Comparator ageComparator = new Comparator() {@Overridepublic int compare(JobCandidate jc1, JobCandidate jc2) {return (jc2.getAge() < jc1.getAge() ? -1 :(jc2.getAge() == jc1.getAge() ? 0 : 1));}};public static Comparator nameComparator = new Comparator() {@Overridepublic int compare(JobCandidate jc1, JobCandidate jc2) {return (int) (jc1.getName().compareTo(jc2.getName()));}}; } public class JobCandidateSorter {ArrayList jobCandidate = new ArrayList<>();public JobCandidateSorter(ArrayList jobCandidate) {this.jobCandidate = jobCandidate;}public ArrayList getSortedJobCandidateByAge() {Collections.sort(jobCandidate, JobCandidate.ageComparator);return jobCandidate;}public ArrayList getSortedJobCandidateByName() {Collections.sort(jobCandidate, JobCandidate.nameComparator);return jobCandidate;}}

對compareTo和compare返回值的理解

A.compareTo(B);就是返回正數的話,當前對象(調用compareTo方法的對象A)要排在比較對象(compareTo傳參對象B)后面;返回負數的話,放在前面;等于0兩數相等。

compare(A,B);就是返回正數的話,當前對象A要排在比較對象B后面;返回負數的話,放在前面;等于0兩數相等。

總結

以上是生活随笔為你收集整理的ArrayList实现自定义排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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