如何在Java中对列表进行排序
有时我们在处理元素之前需要对Java中的列表进行排序。在本教程中,我们将学习如何按自然排序方式对列表进行排序。我们还将学习如何使用我们自己的比较器实现来对对象列表进行排序。Java的列表类似于数组,只是列表的长度是动态的,并且它在Java集合框架中使用。实际上,列表是一个接口,我们大多数时候使用它的实现之一,如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 {
/**
* This class shows how to sort ArrayList in java
* @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");
//using Collections.sort() to 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("Original List::"+dl);
Collections.sort(dl);
System.out.println("Naturally Sorted List::"+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+"}";
}
}
输出:
Original List::[Data{2}, Data{3}, Data{1}]
Naturally Sorted List::[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("Reverse Sorted List using Comparator::" + dl);
输出:
总结
在Java中,可以通过Collections类的sort()方法对列表进行排序。我们可以按照自然顺序对列表进行排序,其中列表元素必须实现Comparable接口。我们也可以传递一个Comparator实现来定义排序规则。
你可以从我们的 GitHub 仓库中查看更多例子。
参考:API 文件