US Bee 2021-08-18 22:13 采纳率: 89.5%
浏览 32
已结题

集合排序问题之——Comparator

**问题:(本例中)Collections.sort方法是用来排序的 吗? 如果是 那下面的compare方法是干什么的啊
还是需要 Collections.sort 和 compare方法 结合才能实现排序 **。以学的就没有Collections.sort这个方法啊,??

各位, 请看 代码

public class StudentDesc implements Comparable<StudentDesc> {
    private String name;
 
    private Integer age;
 
    public StudentDesc(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
 
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
 
    public int compareTo(StudentDesc o) {
        if(null == this.age) {
            return 1;
        }
        if(null == o.getAge()) {
            return -1;
        }
        return o.age.compareTo(this.getAge());
    }
 
    @Override
    public String toString() {
        return "StudentDesc{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

//升序排序
Student studentWang = new Student("王小二", 10);
Student studentZhang = new Student("张三", 1);
Student studentGou = new Student("狗子", 99);
Student studentZhao = new Student("赵六", 40);
Student studentLi = new Student("李四", null);
List<Student> students = new ArrayList<Student>(Arrays.asList(studentWang, studentZhang, studentGou, studentZhao, studentLi));

//sort方法是用来排序的   吗? 如果是   那下面的compare方法是干什么的啊
//还是需要 sort 和 compare方法 结合才能实现排序 

Collections.sort(students, new Comparator<Student>() {

    public int compare(Student o1, Student o2) {
        if(null == o1.getAge()) {
            return -1;
        }
        if(null == o2.getAge()) {
            return 1;
        }
        return o1.getAge().compareTo(o2.getAge());
    }
});

System.out.println("自定义对象,升序排序:");
for(Student student : students) {
    System.out.println(student.toString());
}
  • 写回答

2条回答 默认 最新

  • Selcouther 2021-08-18 23:28
    关注

    Comparable是排序接口,StudentDesc类实现(implements)Comparable接口之后StudentDesc类支持排序,并通过补充compareTo方法实现自定义排序(本例中对student的年龄进行排序)。随后通过调用Collection.sort()方法进行排序。
    compareTo方法和Collection.sort()方法结合使用,上述代码的compare方法中调用了compareTo方法

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 创建了问题 8月18日

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集