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实现自定义排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软工程师心酸成长史
- 下一篇: 什么是伪多项式时间算法