Java中ArrayList 元素的排序
来源:互联网 发布:消防知识知多少手抄报 编辑:程序博客网 时间:2024/04/28 15:05
ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减。
<一> 排序字符串的ArrayList
ArrayList中存储的是String类型的数据,在对这个 ArrayList 进行排序,你需要调用 Collections.sort()方法,看一段示例代码:
package com.sort.pack;import java.util.ArrayList;import java.util.Collections;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类:
package com.sort.pack;import java.util.ArrayList;public class SortArrayListAscDecTest { 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排序ArrayList
Comparable 是带有单一 compareTo()方法的接口。一个实现了 Comparable 接口的类对象可以与其它同类型的对象进行比较,实现 Comparable 接口的类需要重写 compareTo()方法,这个方法接收一个同类型的对象,并实现这个对象和传递给方法的另一个对象比较的逻辑。可以看一段示例代码:
package com.objectfile.writeread;import java.io.Serializable;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; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public float getScore1() { return score1; } public void setScore1(float score1) { this.score1 = score1; } public float getScore2() { return score2; } public void setScore2(float score2) { this.score2 = score2; } public float getScore3() { return score3; } public void setScore3(float score3) { this.score3 = score3; } public float getTotlescore() { return totlescore; } public void setTotlescore(float totlescore){ this.totlescore = totlescore; } @Override public String toString() { return "name: "+this.getName()+" number: "+this.getNumber()+" score1: "+this.getScore1()+" score2: "+this.getScore2()+" score3: "+this.getScore3()+" totlescore:"+this.getTotlescore(); } //按学生总分的降序排列 @Override public 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; }}
test类:
public class testObjectFile { public static void main(String[] args) { List<Student> list = new ArrayList<Student>(); for (int i = 1; i < 6; i++) { Scanner sc = new Scanner(System.in); System.out.println("请输入第 "+i+" 个同学的姓名:"); String name = sc.nextLine(); System.out.println("请输入你的学号:"); String number = sc.nextLine(); System.out.println("请输入你的成绩1:"); float score1 = sc.nextFloat(); System.out.println("请输入你的成绩2:"); float score2 = sc.nextFloat(); System.out.println("请输入你的成绩3:"); float score3 = sc.nextFloat(); Student stu = new Student(name,number,score1,score2,score3); list.add(stu); } saveStudent student = new saveStudent(); list = student.sortStudent(list); //先对所有的学生成绩进行排名}
这种方式你将只能基于一个成员变量(例如上面的例子就是基于学生信息的总分)来对象的比较。
<三>使用 Comparator 排序 ArrayList
Comparator 接口与Comparable 接口相似也提供了一个单一的比较方法叫作 compare()。然而,与 Comparable的 compareTo()方法不同的是,这个 compare()接受两个同类型的不同对象进行比较。
package guru.springframework.blog.sortarraylist.comparator; 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() { @Override public int compare(JobCandidate jc1, JobCandidate jc2) { return (jc2.getAge() < jc1.getAge() ? -1 :(jc2.getAge() == jc1.getAge() ? 0 : 1)); } }; public static Comparator nameComparator = new Comparator() { @Override public int compare(JobCandidate jc1, JobCandidate jc2) { return (int) (jc1.getName().compareTo(jc2.getName())); } }; @Override public String toString() { return " Name: " + this.name + ", Gender: " + this.gender + ", age:" + this.age; } }
一个匿名类并实现了 compare()方法,按照年龄的降序对 JobCandidate 对象进行排序。从37行到42行,我们又写了一个匿名类并实现了 compare() 方法,按照姓名的升序对 JobCandidate进行排序。现在我们写一个类,为委托方对 ArrayList 的元素进行排序。
package guru.springframework.blog.sortarraylist.comparator; 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; } }
getSortedJobCandidateByAge()方法,在这个方法内部我们调用了 Collections.sort()的重载版本,这个版本传递要被排序的 ArrayList 对象和比较年龄的 Comparator 对象。在 getSortedJobCandidateByName()方法内部,我们又调用了 Collections.sort()的另一个重载版本,这个版本传递要被排序的 ArrayList 对象和比较姓名的 Comparator 对象。
- Java中ArrayList 元素的排序
- java 去除ArrayList中重复的元素
- java中ArrayList排序
- java中ArrayList排序
- Java如何对ArrayList里的元素排序
- Java如何对ArrayList里的元素排序
- Java如何对ArrayList里的元素排序
- Java如何对ArrayList里的元素排序
- Java如何对ArrayList里的元素排序
- JAVA中ArrayList的自定义排序
- JAVA中对ArrayList的排序
- 对ArrayList中某一元素进行排序
- java对ArrayList中的元素自定义排序
- java对ArrayList中的元素自定义排序
- java对arrayList中的元素进行排序
- java ArrayList的排序
- java ArrayList的排序
- java中5种打印arraylist元素的方法
- [Coursera]算法基础_Week3_递归_Q1
- 【Python】无须numpy,利用map函数与zip(*)函数对数组转置
- 面试题 寻找缺失的页码
- 流程
- iOS UI 04 轨道和动画
- Java中ArrayList 元素的排序
- 【数组】将给定字符串str="1,2,3!4,5,6,0!7,8,9"存入二维数组中。(使用 split(String regex) ) int[][] a
- IOS中的Block的使用
- 关于字符串的判断为空
- 使用SDWebImage时的内存管理问题
- jQuery动画入门--顺序执行
- [Coursera]算法基础_Week3_递归_Q2
- 【openjudge】仙岛求药
- [leetcode] 264. Ugly Number II 解题报告