Comparable 排序

jdk1.2新增的接口,位于java.lang包下。在jdk5时Comparable改成了Comparable

功能:用于对象的排序或者对象的分组

介绍:Comparable接口强行对实现它的类的每个实例进行自然排序,该接口的唯一方法compareTo方法被称为自然比较方法;强烈建议自然排序和equals一致(就是两个对象调用compareTo方法和调用equals方法返回的布尔值应该一样)

方法: int compareTo(Object o)

利用当前对象和传入的目标对象进行比较,若是当前对象比目标对象大,则返回1,那么当前对象会排在目标对象的后面

若是当前对象比目标对象小,则返回-1,那么当前对象会排在目标对象的后面

若是两个对象相等,则返回0


    private int id;
    private int age;
    private String name;

    public Student() {
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public int compareTo(Student o) {
        // 降序
      //  return o.age-this.age;
        //升序
        return this.age-o.age;
    }


    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
    }

public class Test1 {

    public static void main(String[] args) {
        List<Student> list=new ArrayList<>();
        list.add(new Student(1,102,"张三"));
        list.add(new Student(3,104,"张三3"));
        list.add(new Student(2,103,"张三2"));
        list.add(new Student(4,101,"张三4"));
        System.out.println("------排序钱-----");
        list.forEach(student -> System.out.println(student.toString()));
        System.out.println("*******使用默认排序后******");
		 Collections.sort(list);//这一步是调用student里规定排序的方法
        list.stream().forEach(student -> System.out.println(student.toString()));

        System.out.println("---------多种比较方法--------");
       list.sort(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o2.getId()-o1.getId();
            }

        });

     list.forEach(student -> System.out.println(student.toString()));
    }

打印结果:
------排序前 -----
Student{id=1, age=102, name=‘张三’}
Student{id=3, age=104, name=‘张三3’}
Student{id=2, age=103, name=‘张三2’}
Student{id=4, age=101, name=‘张三4’}
*使用默认排序后
Student{id=4, age=101, name=‘张三4’}
Student{id=1, age=102, name=‘张三’}
Student{id=2, age=103, name=‘张三2’}
Student{id=3, age=104, name=‘张三3’}
三种打印结果:
------排序前-----
Student{id=1, age=102, name=‘张三’}
Student{id=3, age=104, name=‘张三3’}
Student{id=2, age=103, name=‘张三2’}
Student{id=4, age=101, name=‘张三4’}
*使用默认排序后
Student{id=4, age=101, name=‘张三4’}
Student{id=1, age=102, name=‘张三’}
Student{id=2, age=103, name=‘张三2’}
Student{id=3, age=104, name=‘张三3’}
---------多种比较方法--------
Student{id=4, age=101, name=‘张三4’}
Student{id=3, age=104, name=‘张三3’}
Student{id=2, age=103, name=‘张三2’}
Student{id=1, age=102, name=‘张三’}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值