java集合中比较器排序和自然排序

对于一个简单的Student类中,存储到TreeSet集合中按照Id大小排序
一.使用自然排序:定义自己的排序规则,重写compareTo方法即可
Student类:

public class Student implements Comparable<Student> {
	private int id;
	public Student(int id){
		this.id = id;
	}
	
	public int getId() {
		return id;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + "]";
	}
	@Override
	public int compareTo(Student s) {
		if (s.getId() < this.id) {
			return -1;
		}
		else {
			return 1;
		}
		
	}
}

测试类:

public class TestCompare {
	public static void main(String[] args) {
		TreeSet<Student> set = new TreeSet<>();
		set.add(new Student(6));
		set.add(new Student(7));
		set.add(new Student(5));**加粗样式**
		set.add(new Student(1));
		for (Student student : set) {
			System.out.println(student);
		}
	}
}

结果:
在这里插入图片描述二.使用比较器排序:用匿名内部类的方式实现Comparator接口,通过实现其中的compare方法,对其返回值进行处理,从而实现排序的功能

public class TestComparator {
	public static void main(String[] args) {
		TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {
			@Override
			public int compare(Student s1, Student s2) {
				return s2.getId() - s1.getId();
			}
		});
		set.add(new Student(6));
		set.add(new Student(7));
		set.add(new Student(5));
		set.add(new Student(1));
		for (Student student : set) {
			System.out.println(student);
		}
	}
}

注意:如果bean类没有实现Compare接口或者Comparator接口,然后使用TreeSet来存储数据,则会报错:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值