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 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了