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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ArrayList 排序

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

1)排序字符串對象的ArrayList
一個 ArrayList 存儲著以字符串形式存在的國名(country name),為了對這個 ArrayList 進行排序,你需要調用 Collections.sort()方法,傳遞由國名構成的 ArrayList 對象。這種方法將按照自然順序(按字母升序)對元素(國名)進行排序。

ArrayList countryList = new ArrayList<>();
countryList.add(“France”); countryList.add(“USA”);
countryList.add(“India”); countryList.add(“Spain”);
countryList.add(“England”);

private ArrayList arrayList;public SortArrayListAscendingDescending(ArrayList arrayList) {this.arrayList = arrayList;}public ArrayList getArrayList() {return this.arrayList;}public ArrayList sortAscending() {Collections.sort(this.arrayList);return this.arrayList;}}

在上面的類中,我們在構造器中初始化了一個 ArrayList 對象。在 sortAscending()方法中,我們調用了 Collections.sort()方法,并傳遞這個初始化的 ArrayList對象為參數,返回排序后的 ArrayList。

但現實生活中,arraylist 不是這樣。
舉個例子:JobCandidate 類的對象保存在 ArrayList 中并準備對其進行排序。JobCandidate 類有三個成員變量:字符串類型的姓名和性別、整型的年齡。我們想要對保存在 ArrayList 中的 JobCandidate 對象按照年齡進行排序。
使用Collections.sort() 方法對 ArrayList 的元素或者任何其他 List 的實現提供的可比較的元素進行排序。卻是無法正常按照上面的進行。
這些元素的類需要實現 java.lang 包中的 Comparable 接口。

2)使用Comparable排序ArrayList
Comparable 是帶有單一 compareTo()方法的接口。一個實現了 Comparable 接口的類對象可以與其它同類型的對象進行比較,實現 Comparable 接口的類需要重寫 compareTo()方法,這個方法接收一個同類型的對象,并實現這個對象和傳遞給方法的另一個對象比較的邏輯。compareTo()方法返回Int類型的比較結果,分別代表下面的含義:

正值表示當前對象比傳遞給 comPareTO()的對象大 負值表示當前對象比傳遞給 comPareTO()的對象小 零表示兩個對象相等 public class JobCandidate implements Comparable {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 String getName() {return name;}public String getGender() {return gender;}public int getAge() {return age;}@Overridepublic int compareTo(JobCandidate candidate) {return (this.getAge() < candidate.getAge() ? -1 :(this.getAge() == candidate.getAge() ? 0 : 1));}@Overridepublic String toString() {return " Name: " + this.name + ", Gender: " + this.gender + ", age:" + this.age;}}

下面我們將寫一個輔助類,為委托方對包含了 JobCandidate 元素的 ArrayList 對象進行排序。

import java.util.ArrayList;import java.util.Collections;public class JobCandidateSorter {ArrayList jobCandidate = new ArrayList<>();public JobCandidateSorter(ArrayList jobCandidate) {this.jobCandidate = jobCandidate;}public ArrayList getSortedJobCandidateByAge() {Collections.sort(jobCandidate);return jobCandidate;}}

使用 Comparable 對 ArrayList 排序是一種常用的方法。但是你必須知道有某些限制。你想要排序的對象的類必須實現 Comparable 并覆寫 compareTo()方法。這基本上意味著你將只能基于一個成員變量來比較對象(我們例子中的年齡字段)。如果要求你按照姓名和年齡來對 JobCandidate 對象進行排序怎么辦? Comparable 就不是解決的方法了。另外,比較邏輯是需要進行比較的對象的類的一部分,它消除了比較邏輯可復用性的可能。Java 通過使用在 java.util 包下提供的Comparator接口解決了上述的比較需求。

3.使用 Comparator 排序 ArrayList
Comparator 接口與Comparable 接口相似也提供了一個單一的比較方法叫作 compare()。然而,與 Comparable的 compareTo()方法不同的是,這個 compare()接受兩個同類型的不同對象進行比較。

import java.util.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 String getName() {return name;}public String getGender() {return gender;}public int getAge() {return 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()));}};@Overridepublic String toString() {return " Name: " + this.name + ", Gender: " + this.gender + ", age:" + this.age;}}

輔助類

import java.util.ArrayList;import java.util.Collections;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;}}

總結
ArrayList 排序的不同方法。一種是使用 Comparable 另一種是使用 Comparator。方法的選擇一直是造成程序員們困惑的原因之一。你最應該記住的就是一個 Comparable 對象可以說“我可以自己與另外一個對象比較”而一個 Comparator 對象可以說“我可以比較兩個不同的對象”。你不能說一個接口比另一個要好。選擇的接口取決于你需要實現的功能。

總結

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

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