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

使用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使用Comparator排序列表对象

总结

在Java中,可以通过Collections类的sort()方法对列表进行排序。我们可以按照自然顺序对列表进行排序,其中列表元素必须实现Comparable接口。我们也可以传递一个Comparator实现来定义排序规则。

你可以从我们的 GitHub 仓库中查看更多示例。

参考:API 文档

bannerAds