Java集合框架之Comparable排序接口

一:Comparable接口初识

  • 是一个接口,定制排序规则,对实现它的每个类的对象进行整体排序,里面 compareTo 方法是实现排序的具体方法
  • 比如TreeSet、SortedSet、Collections.sort() 方法调用进行排序
  • String、Integer等类默认实现了这个接口,所以可以排序(看源码)
  • 表达方式
public interface Comparable<T> {
  public int compareTo(T o);
}
  • 详解compareTo方法
    • 用于比较当前对象和传进来对象的大小,o为要比较的对象
    • 返回int类型
      • 大于0, 表示this大于传进来的对象o ,则往后排,即升序
      • 等于0,表示this等于传进来的对象o
      • 小于0,表示this小于传进来的对象o

    二:案例实操

    需求:根据学生年龄,进行排序
    • 代码理解:
      • Student 实现 Comparable接口(public class Student implements Comparable)
      • 创建Student类,重写compareTo方法( @Override)
      • Student another(参数为传进来比较的对象)
package chapter9;

public class Student implements Comparable<Student> {
    private String name;

    private int age;

    private int height;

    public Student(){

    }

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

    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;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }


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

    @Override
    public int compareTo(Student another) {
        return this.age - another.age;
    }
}
  • 创建运行类ComparableDemo.java,查看运行效果
package chapter9;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class ComparableDemo {
    public static void main(String[] args) {
        Set<Student> set = new TreeSet<>();
        set.add(new Student("老王",20,170));
        set.add(new Student("大钊",32,178));
        set.add(new Student("张三",24,150));
        set.add(new Student("冰冰",29,172));
        set.add(new Student("小DD",31,175));
        System.out.println(set);
    }
}
/**
运行结果:已自动按照compareTo方法,自动排好序
[Student{name='老王', age=20, height=170}, Student{name='张三', age=24, height=150}, 
Student{name='冰冰', age=29, height=172}, Student{name='小DD', age=31, height=175}, 
Student{name='大钊', age=32, height=178}]
*/

三:总结

  • 如果类的自然排序逻辑就是所需要的排序方式,并且不会改变,那么应该实现Comparable接口。
  • 如果需要为类提供多种排序方式,或者需要对没有实现Comparable接口的类进行排序,那么应该使用Comparator。
  • Comparator提供了更高的灵活性,它允许为同一个类定义多个不同的排序方式,并且可以用于比较任何对象
  • Comparable在类的自然排序逻辑简单,且不会改变的情况下更为方便。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值