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”);
在上面的類中,我們在構造器中初始化了一個 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類型的比較結果,分別代表下面的含義:
下面我們將寫一個輔助類,為委托方對包含了 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.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 排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑pdf怎么转word文档格式?
- 下一篇: 张红岩的《TOEFL词汇精选》,我制订了