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日

悬赏问题

  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了