欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java之List集合三种排序方式

程序员文章站 2022-03-23 22:11:35
Java之List集合三种排序方式方式一(Integer类型集合排序)方式二(对象类型集合排序)方式三(同样是对象类型集合排序 )方式一(Integer类型集合排序)public static void main(String[] args) {List nums = new ArrayList();nums.add(3);nums.add(5);nums.add(1);nums.add(0);System.out.pr...

方式一(Integer类型集合排序)

public static void main(String[] args) {
	List<Integer> nums = new ArrayList<Integer>();
	nums.add(3);
	nums.add(5);
	nums.add(1);
	nums.add(0);
	System.out.println(nums);
	Collections.sort(nums);
	System.out.println(nums);
}
/*
 * 输出结果
 * [3, 5, 1, 0]
 * [0, 1, 3, 5]
 */ 

方式二(对象类型集合排序)

package core.java.collection.collections;
public class User implements Comparable<User>{
	private int score;
	private int age;
	public User(int score, int age){
		super();
		this.score = score;
		this.age = age;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public int compareTo(User o) {
		int i = this.getAge() - o.getAge();//先按照年龄排序
		if(i == 0){
			return this.score - o.getScore();//如果年龄相等了再用分数进行排序
		}
		return i;
	}
}
 
public static void main(String[] args) {
	List<User> users = new ArrayList<User>();
	users.add(new User(78, 26));
	users.add(new User(67, 23));
	users.add(new User(34, 56));
	users.add(new User(55, 23));
	Collections.sort(users);
	for(User user : users){
		System.out.println(user.getScore() + "," + user.getAge());
	}
	/*
	 * 输出结果
	 * 55,23
	 * 67,23
	 * 78,26
	 * 34,56
	 */ 
}

我们会发现sort(List)方法中List中的T必须实现Comparable接口,然后实现compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;为什么在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现了Comparable接口,Java已经给我们做好了。

方式三(同样是对象类型集合排序 )

package core.java.collection.collections;
public class Students {
	private int age;
	private int score;
	public Students(int age, int score){
		super();
		this.age = age;
		this.score = score;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
}
public static void main(String[] args) {
	List<Students> students = new ArrayList<Students>();
	students.add(new Students(23, 100));
	students.add(new Students(27, 98));
	students.add(new Students(29, 99));
	students.add(new Students(29, 98));
	students.add(new Students(22, 89));
	Collections.sort(students, new Comparator<Students>() {
		@Override
		public int compare(Students o1, Students o2) {
			int i = o1.getScore() - o2.getScore();
			if(i == 0){
				return o1.getAge() - o2.getAge();
			}
			return i;
		}
	});
	for(Students stu : students){
		System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
	}
	/*
	 * 输出结果
	 * score:89:age22
	 * score:98:age27
	 * score:98:age29
	 * score:99:age29
	 * score:100:age23
	 */
}

从上面的例子我们可以看出Students类没有实现Comparable接口,只是在sort()方法中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。

本文地址:https://blog.csdn.net/weixin_39157014/article/details/109997771