可以利用Collections集合工具类中的方法进行排序:
public static <T> void sort(List<T> list):将集合中的元素按默认规则(升序)排序
public static <T> void sort(List<T> list,Comparator<? super T>:将集合中的元素按照指定规则排序

第一种方法
如果集合中存放的整数类
public static void main(String[] args){
	ArrayList<Integer> list1 = new ArrayList<>();
	list1.add(54);
	list1.add(25);
	list1.add(29);
	list1.add(11);
	Collections.sort(list1);
	for(int i:list1)
		System.out.println(i);
	//输出结果
	/*11
	25
	29
	54*/
}
如果存放的是字符串
public static void main(String[] args){
	ArrayList<String> list4 = new ArrayList<>();
	list4.add("hello");
	list4.add("world");
	list4.add("bye");
	Collections.sort(list4);
	for(String s :list4)
		System.out.println(s);
	//输出结果
	/*
	bye
	hello
	world
	*/
}
如果存放的自定义对象

因为Collections.sort(List<T> list)中的list参数必须要有明确的排序规则,所以要对存放了自定义对象的list集合进行排序,需要该对象实现Comparable接口,并实现接口唯一的方法compareTo(T o),按照我们自定义的规则进行排序。例如自定义Person类,按照年龄升序排序:

public class Person implements Comparable<Person>{
	private String name;
	private int age;
	
	public Person() {
		
	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
	@Override
	public int compareTo(Person o) {
		return this.age - o.age;//this-参数 升序
		//return o.age - this.age  降序
	}
}
public static void main(String[] args){
	ArrayList<Person> list2 = new ArrayList<>();
	list2.add(new Person("张三",32));
	list2.add(new Person("李四",12));
	list2.add(new Person("王五",23));
	Collections.sort(list2);
	for(Person p:list2) 
		System.out.println(p);
	//输出结果
	/*Person [name=李四, age=12]
	Person [name=王五, age=23]
	Person [name=张三, age=32]*/
}
第二种方法

第二种方法中的第二个参数是需要实现Comparator接口,需要实现接口中的compare(T o1,T o2)方法,一般对自定义对象排序的时候可采取这种方法。
ComparatorComparable接口的区别在于,Comparator接口相当于第三方的裁判,对传入的两个参数进行比较;Comparable接口是用自身(this)与参数进行比较。
例子如下,先创建一个Student类

public class Student {
	private String name;
	private int score;
	
	public Student() {
	}

	public Student(String name,int score) {
		this.name = name;
		this.score = score;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", score=" + score + "]";
	}

创建集合,在集合中存放Student对象,采用匿名内部类的方法实现Comparator接口,按照分数降序排序

public static void main(String[] args){
	ArrayList<Student> list3 = new ArrayList<>();
	list3.add(new Student("张三",75));
	list3.add(new Student("李四",91));
	list3.add(new Student("王五",89));
	Collections.sort(list3, new Comparator<Student>(){

		@Override
		public int compare(Student o1, Student o2) {
			//return o1.getScore() - o2.getScore();//升序
			return o2.getScore() - o1.getScore(); //降序
		}
		
	});
}
//输出结果
/*
Student [name=李四, score=91]
Student [name=王五, score=89]
Student [name=张三, score=75]
*/

如果文章有错误,欢迎指正!!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐