java的arraylist_Java ArrayList排序的3种方法
首頁(yè)?>?基礎(chǔ)教程?>?集合框架?>?ArrayList類
Java ArrayList排序的3種方法
1. 使用Collections.sort()方法進(jìn)行排序
ArrayList 存儲(chǔ)著以字符串形式存在的國(guó)名(country name),為了對(duì)這個(gè) ArrayList 進(jìn)行排序,你需要調(diào)用 Collections.sort()方法,傳遞由國(guó)名構(gòu)成的 ArrayList 對(duì)象。這種方法將按照自然順序(按字母升序)對(duì)元素(國(guó)名)進(jìn)行排序。代碼如下:
public class SortArrayListAscendingDescending {
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;
}
public ArrayList sortDescending() {
Collections.sort(this.arrayList, Collections.reverseOrder());
return this.arrayList;
}
}
在SortArrayListAscendingDescending類中,我們?cè)跇?gòu)造器中初始化了一個(gè) ArrayList 對(duì)象。在 sortAscending()方法中,我們調(diào)用了 Collections.sort()方法,并傳遞這個(gè)初始化的 ArrayList對(duì)象為參數(shù),返回排序后的 ArrayList。在 sortDescending()方法中,我們調(diào)用重載的 Collections.sort()方法讓其按照降序?qū)υ嘏判?#xff0c;這個(gè)版本的 Collections.sort()接收ArrayList對(duì)象作為第一個(gè)參數(shù),一個(gè)由 Collections.reverseOrder()方法返回的 Comparator 對(duì)象作為第二個(gè)參數(shù)。
public class SortArrayListAscendingDescendingTest {
public void testSortAscendingDescending() throws Exception {
ArrayList countryList = new ArrayList();
countryList.add("France");
countryList.add("USA");
countryList.add("India");
countryList.add("Spain");
countryList.add("England");
SortArrayListAscendingDescending sortArrayList = new SortArrayListAscendingDescending(countryList);
ArrayList unsortedArrayList = sortArrayList.getArrayList();
System.out.println("Unsorted ArrayList: " + unsortedArrayList);
ArrayList sortedArrayListAscending = sortArrayList.sortAscending();
System.out.println("Sorted ArrayList in Ascending Order : " +
sortedArrayListAscending);
ArrayList sortedArrayListDescending = sortArrayList.sortDescending();
System.out.println("Sorted ArrayList in Descending Order: " +
sortedArrayListDescending);
}
}
在SortArrayListAscendingDescendingTest測(cè)試代碼中,我們創(chuàng)建一個(gè) ArrayList 對(duì)象,并添加了 5 個(gè)字符串對(duì)象代表 5 個(gè)國(guó)家的名字。然后我們調(diào)用 getArrayList()、sortAscending()和 sortDescending()方法,并打印這些方法返回的 ArrayList 對(duì)象。
顯示結(jié)果:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running guru.springframework.blog.sortarraylist.ascendingdescending.SortArrayListAscendingDescendingTest
Unsorted ArrayList: [France, USA, India, Spain, England]
Sorted ArrayList in Ascending Order : [England, France, India, Spain, USA]
Sorted ArrayList in Descending Order: [USA, Spain, India, France, England]
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in guru.springframework.blog.sortarraylis
2. 使用Comparable排序
讓我們來(lái)舉一個(gè)例子,JobCandidate 類的對(duì)象保存在 ArrayList 中并準(zhǔn)備對(duì)其進(jìn)行排序。JobCandidate 類有三個(gè)成員變量:字符串類型的姓名和性別、整型的年齡。我們想要對(duì)保存在 ArrayList 中的 JobCandidate 對(duì)象按照年齡進(jìn)行排序。因此我們要讓 JobCandidate 類實(shí)現(xiàn) Comparable 接口并重寫(xiě) 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;
}
@Override
public int compareTo(JobCandidate candidate) {
return ((this.getAge() < candidate.getAge()) ? (-1)
: ((this.getAge() == candidate.getAge())
? 0 : 1));
}
@Override
public String toString() {
return " Name: " + this.name + ", Gender: " + this.gender + ", age:" +
this.age;
}
}
JobCandidate 類被重寫(xiě)的 compareTo()方法中,我們實(shí)現(xiàn)了基于年齡的比較邏輯。
public class JobCandidateSorter {
ArrayList jobCandidate = new ArrayList<>();
public JobCandidateSorter(ArrayList jobCandidate) {
this.jobCandidate = jobCandidate;
}
public ArrayList getSortedJobCandidateByAge() {
Collections.sort(jobCandidate);
return jobCandidate;
}
}
在 JobCandidateSorter 類中,我們初始化了一個(gè) ArrayList 對(duì)象,委托方將通過(guò)構(gòu)造函數(shù)實(shí)例化 JobCandidateSorter 。然后我們編寫(xiě)了 getSortedJobCandidateByAge()方法,在這個(gè)方法中,我們調(diào)用 Collections.sort()并傳遞已經(jīng)初始化了的 ArrayList 為參數(shù),最后返回排序后的 ArrayList。
public class JobCandidateSorterTest {
public void testGetSortedJobCandidateByAge() throws Exception {
JobCandidate jobCandidate1 = new JobCandidate("Mark Smith", "Male", 26);
JobCandidate jobCandidate2 = new JobCandidate("Sandy Hunt", "Female", 23);
JobCandidate jobCandidate3 = new JobCandidate("Betty Clark", "Female",
20);
JobCandidate jobCandidate4 = new JobCandidate("Andrew Styne", "Male", 24);
ArrayList jobCandidateList = new ArrayList();
jobCandidateList.add(jobCandidate1);
jobCandidateList.add(jobCandidate2);
jobCandidateList.add(jobCandidate3);
jobCandidateList.add(jobCandidate4);
JobCandidateSorter jobCandidateSorter = new JobCandidateSorter(jobCandidateList);
ArrayList sortedJobCandidate = jobCandidateSorter.getSortedJobCandidateByAge();
System.out.println("-----Sorted JobCandidate by age: Ascending-----");
for (JobCandidate jobCandidate : sortedJobCandidate) {
System.out.println(jobCandidate);
}
}
}
JobCandidateSorterTest類中,我們創(chuàng)建了四個(gè) JobCandidate 對(duì)象并把它們添加到 ArrayList,然后傳遞這個(gè) ArrayList 到構(gòu)造函數(shù)來(lái)實(shí)例化 JobCandidateSorter 類。最后,我們調(diào)用 JobCandidateSorter 類的 getSortedJobCandidateByAge()方法,并打印這個(gè)方法返回的排序后的 ArrayList。測(cè)試的輸出結(jié)果如下:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running guru.springframework.blog.sortarraylist.comparable.JobCandidateSorterTest
-----Sorted JobCandidate by age: Ascending-----
Name: Betty Clark, Gender: Female, age:20
Name: Sandy Hunt, Gender: Female, age:23
Name: Andrew Styne, Gender: Male, age:24
Name: Mark Smith, Gender: Male, age:26
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec
- in guru.springframework.blog.sortarraylist.comparable.JobCandidateSorterTest
3.?使用 Comparator 排序
比如我有一個(gè)Person類,它的實(shí)例對(duì)象存儲(chǔ)在ArrayList數(shù)組中,現(xiàn)在要把ArrayList數(shù)組中的Person對(duì)象按照年齡排序.代碼如下:
Person類
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Mycomparator類
public class Mycomparator implements Comparator {
public int compare(Object o1, Object o2) {
Person p1 = (Person) o1;
Person p2 = (Person) o2;
if (p1.age < p2.age) return 1;
else return 0;
}
}
ListSort類
public class ListSort {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Person("lcl", 28));
list.add(new Person("fx", 23));
list.add(new Person("wqx", 29));
Comparator comp = new Mycomparator();
Collections.sort(list, comp);
for (int i = 0; i < list.size(); i) {
Person p = (Person) list.get(i);
System.out.println(p.getName());
}
}
}
當(dāng)然,如果你的List包裝的是基本類型或者String,則只要 Collections.sort(list);即可
版權(quán)聲明:本文為JAVASCHOOL原創(chuàng)文章,未經(jīng)本站允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的java的arraylist_Java ArrayList排序的3种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring mvc的DataBinde
- 下一篇: cisco产品命名