Java列表排序完全指南:掌握多种排序方法与技巧
有时我们在处理元素之前需要对Java中的列表进行排序。在本教程中,我们将学习如何按自然排序方式对列表进行排序。我们还将学习如何使用自定义比较器实现对对象列表进行排序。Java中的列表类似于数组,但列表的长度是动态的,并且它在Java集合框架中使用。实际上,List是一个接口,我们大多数时候使用它的实现类,如ArrayList或LinkedList等。
Java排序列表
在这里,我们将学习如何在Java中对对象列表进行排序。我们可以使用Collections.sort()方法以自然升序对列表进行排序。列表中的所有元素必须实现Comparable接口,否则将抛出IllegalArgumentException异常。让我们来看一个简单的示例,对字符串列表进行排序。
package com.Olivia.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class JavaListSort {
/**
* 这个类展示了如何在Java中对ArrayList进行排序
* @param args
*/
public static void main(String[] args) {
List<String> strList = new ArrayList<String>();
strList.add("A");
strList.add("C");
strList.add("B");
strList.add("Z");
strList.add("E");
//使用Collections.sort()方法对ArrayList进行排序
Collections.sort(strList);
for(String str: strList) System.out.print(" "+str);
}
}
你可以看到我们正在使用Collections.sort()方法来对字符串列表进行排序。String类实现了Comparable接口。输出:

使用Java对对象列表进行排序
我们来看另一个例子,我们将对一个自定义对象列表进行排序。请注意该类必须实现Comparable接口。
package com.Olivia.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class JavaSortListObject {
public static void main(String[] args) {
List<Data> dl = new ArrayList<>();
dl.add(new Data(2));
dl.add(new Data(3));
dl.add(new Data(1));
System.out.println("原始列表::"+dl);
Collections.sort(dl);
System.out.println("自然排序后的列表::"+dl);
}
}
class Data implements Comparable<Data> {
private int id;
public Data(int i) {
this.id = i;
}
@Override
public int compareTo(Data d) {
return this.id - d.getId();
}
public int getId() {
return id;
}
@Override
public String toString() {
return "Data{"+this.id+"}";
}
}
输出:
原始列表::[Data{2}, Data{3}, Data{1}]
自然排序后的列表::[Data{1}, Data{2}, Data{3}]
使用Comparator在Java中对List进行排序
Collections.sort()方法是重载的,我们也可以提供自己的Comparator实现来定义排序规则。由于Comparator是一个函数式接口,我们可以使用Lambda表达式在一行中编写它的实现。
Collections.sort(dl, (d1, d2) -> {
return d2.getId() - d1.getId();
});
System.out.println("使用Comparator进行反向排序的列表::" + dl);
输出:

总结
在Java中,可以通过Collections类的sort()方法对列表进行排序。我们可以按照自然顺序对列表进行排序,其中列表元素必须实现Comparable接口。我们也可以传递一个Comparator实现来定义排序规则。
你可以从我们的 GitHub 仓库中查看更多示例。
参考:API 文档