首页 > 基础教程 > 集合框架 > ArrayList类

Java ArrayList排序的3种方法

1. 使用Collections.sort()方法进行排序

ArrayList 存储着以字符串形式存在的国名(country name),为了对这个 ArrayList 进行排序,你需要调用 Collections.sort()方法,传递由国名构成的 ArrayList 对象。这种方法将按照自然顺序(按字母升序)对元素(国名)进行排序。代码如下:

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类中,我们在构造器中初始化了一个 ArrayList 对象。在 sortAscending()方法中,我们调用了 Collections.sort()方法,并传递这个初始化的 ArrayList对象为参数,返回排序后的 ArrayList。在 sortDescending()方法中,我们调用重载的 Collections.sort()方法让其按照降序对元素排序,这个版本的 Collections.sort()接收ArrayList对象作为第一个参数,一个由 Collections.reverseOrder()方法返回的 Comparator 对象作为第二个参数。

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测试代码中,我们创建一个 ArrayList 对象,并添加了 5 个字符串对象代表 5 个国家的名字。然后我们调用 getArrayList()、sortAscending()和 sortDescending()方法,并打印这些方法返回的 ArrayList 对象。

显示结果:

-------------------------------------------------------

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排序

让我们来举一个例子,JobCandidate 类的对象保存在 ArrayList 中并准备对其进行排序。JobCandidate 类有三个成员变量:字符串类型的姓名和性别、整型的年龄。我们想要对保存在 ArrayList 中的 JobCandidate 对象按照年龄进行排序。因此我们要让 JobCandidate 类实现 Comparable 接口并重写 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 类被重写的 compareTo()方法中,我们实现了基于年龄的比较逻辑。

public class JobCandidateSorter {

ArrayList jobCandidate = new ArrayList<>();

public JobCandidateSorter(ArrayList jobCandidate) {

this.jobCandidate = jobCandidate;

}

public ArrayList getSortedJobCandidateByAge() {

Collections.sort(jobCandidate);

return jobCandidate;

}

}

在 JobCandidateSorter 类中,我们初始化了一个 ArrayList 对象,委托方将通过构造函数实例化 JobCandidateSorter 。然后我们编写了 getSortedJobCandidateByAge()方法,在这个方法中,我们调用 Collections.sort()并传递已经初始化了的 ArrayList 为参数,最后返回排序后的 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类中,我们创建了四个 JobCandidate 对象并把它们添加到 ArrayList,然后传递这个 ArrayList 到构造函数来实例化 JobCandidateSorter 类。最后,我们调用 JobCandidateSorter 类的 getSortedJobCandidateByAge()方法,并打印这个方法返回的排序后的 ArrayList。测试的输出结果如下:

-------------------------------------------------------

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 排序

比如我有一个Person类,它的实例对象存储在ArrayList数组中,现在要把ArrayList数组中的Person对象按照年龄排序.代码如下:

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());

}

}

}

当然,如果你的List包装的是基本类型或者String,则只要 Collections.sort(list);即可

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。

java的arraylist_Java ArrayList排序的3种方法相关推荐

  1. java 遍历方法_Java ArrayList遍历的3种方法

    首页 > 基础教程 > 集合框架 > ArrayList类 Java ArrayList遍历的3种方法 1. Iterator方法遍历 for(Iterator it2 = list ...

  2. 按对象某属性排序的几种方法

    按对象某属性排序的几种方法: 第一种,可以实现边添加边排序,需要用到TreeSet. 第二种,用数组存放对象们,但是不需单独取出某属性排列好再重存,而是在原数组上用比较器重新排一次序.需要用到Arra ...

  3. Java 数组转成集合List三种方法和(数组、集合List、Set相互转换)

    Java 数组转成集合List 三种方法 package com.list;import java.util.ArrayList; import java.util.Arrays; import ja ...

  4. Java中遍历Set集合的三种方法

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  5. oracle进行排序,oracle排序的几种方法

    1.创建数据库表 CREATE TABLE USER_INFO ( USERID      VARCHAR2(10 BYTE)                 NOT NULL, USERNAME   ...

  6. C# hashTable的遍历【2种方法】与排序【3种方法】

    private void Form1_Load(object sender, EventArgs e) { Hashtable ht = new Hashtable(); ht.Add("j ...

  7. Java中遍历Set集合的三种方法(实例代码)

    哈喽,欢迎来到小朱课堂,下面开始你的学习吧! Java中遍历Set集合的三种方法 废话不多说,直接上代码 1.迭代遍历: Set set = new HashSet(); Iterator it = ...

  8. JAVA中创建线程池的五种方法及比较

    之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过Thr ...

  9. java 中lock,java中lock获取锁的四种方法

    在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...

最新文章

  1. PHP全栈开发(八):CSS Ⅸ dispaly visibility
  2. python里面temp是啥-python temp file:如何打开多次临时文件?
  3. 027_html框架
  4. Servlet3.0下配置Servlet
  5. Docker部署OpenProject
  6. 1024,第 15 届「中国内核开发者大会」 参会指南(议程全剧透)
  7. 如何使用MaxCompute Spark读写阿里云Hbase
  8. 细数数据中台的3个业务价值和5个技术价值
  9. centos7--shell脚本自动实现bond配置-第二版
  10. 哪三级分类java_技术汇总:第五章:使用angularjs做首页三级分类
  11. Win7中语音识别功能的详细介绍
  12. perl的bareword
  13. 绍兴文理学院计算机网络期末,绍兴文理学院高频电子线路期末考试题.doc
  14. matlab绘制图形中,常用函数调用(num2str,disp,gcf,hold on,plot,axis,subplot,line,stairs,grid,set,gca)
  15. 高端存储系统的发展方向展望
  16. activator java_Activator常用方法
  17. EverEdit - 值得关注的国产原创开发的免费高效优秀的文本与代码编辑器
  18. 请先切换至Wxml Pannel的解决方法
  19. 基于 python 和 UDP 协议实现简易聊天室(多人群聊)----详细解析带字幕
  20. 译文: C28x Compiler Error and Warning Messages

热门文章

  1. 基于STM32单片机的智能家居测量系统设计
  2. Win10 安裝pytorch 的坑
  3. js控制页面div盒子移动
  4. 记录华清远见济南分公司嵌入式软件开发培训
  5. 特征点检测之SURF
  6. sdk_int值对照表
  7. qsort(快速排序)的用法
  8. 大数据和云计算技术周报(第169期)
  9. excel实用技巧:如何将收藏内容制成二维码以便管理
  10. 用python画四叶草后输入到桌面上的代码-用 python 实现 xmind 和 mindjet 格式互转