Comparable VS Comparator

Comparable  和 Comparator都是用于对象排序的接口,但是使用方法稍有差异。

对象的排序通常使用两种方法可操作: 

1、Collections.sort(参数一);

2、Collections.sort(参数一,参数二);

使用第一种方法参数一集合中的对象必须实现Comparable 接口且 覆写compareTo()方法,compareTo方法中描述了如何对两个对象比较大小。

使用第二种方法集合中的对象不必实现任何接口,只需在参数二中描述一个Comparator的实现类,告诉如何对集合中对象比较大小。

使用Collections.sort(参数一)排序的实例如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class CourseCompare implements Comparable<CourseCompare>{

    /**
     *课程ID
     */
    private Integer courseId;

    /**
     *课程编号
     */
    private Integer courseNumber;

    /**
     *课程名称
     */
    private String courseName;

    /**
     *课程任课教师
     */
    private Integer teacherId;

    @Override
    public int compareTo(CourseCompare o) {
       return Integer.compare(this.courseNumber,o.getCourseNumber());
    }
}

    private static void test1() {
        List<CourseCompare> courses = new ArrayList<>();
        courses.add(new CourseCompare(1,1,"语文",1));
        courses.add(new CourseCompare(2,4,"数学",2));
        courses.add(new CourseCompare(3,3,"化学",3));
        courses.add(new CourseCompare(4,2,"物理",4));
        Collections.sort(courses);
        courses.forEach(System.out::println);

    }

使用Collections.sort(参数一,参数二)排序的如下:

@NoArgsConstructor
@AllArgsConstructor
@Data
@Accessors(chain = true)
public class Course {
    /**
     *课程ID
     */
    private Integer courseId;

    /**
     *课程编号
     */
    private Integer courseNumber;

    /**
     *课程名称
     */
    private String courseName;

    /**
     *课程任课教师
     */
    private Integer teacherId;
}
    private static void test2() {
        List<CourseCompare> courses = new ArrayList<>();
        courses.add(new CourseCompare(1,1,"语文",1));
        courses.add(new CourseCompare(2,4,"数学",2));
        courses.add(new CourseCompare(3,3,"化学",3));
        courses.add(new CourseCompare(4,2,"物理",4));
        Collections.sort(courses, new Comparator<CourseCompare>() {
            @Override
            public int compare(CourseCompare o1, CourseCompare o2) {
               return o1.getCourseNumber()-o2.getCourseNumber();
            }
        });
        courses.forEach(System.out::println);
    }

结论:Comparator排序对对象入侵小,使用灵活,开发中应优先使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值