0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

比较器comparable和comparator的区别

CHANBAEK 来源:博客园-阿文程序猿 作者:博客园-阿文程序猿 2023-01-30 15:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一,比较器

比较变量之间的大小 -> 排序

1. 可比性

接口对实现它的每个类的对象强制执行排序。

实现此接口的对象的数组, 可以通过Arrays.sort自动排序。

comparable中有个compareTo方法

将此对象与指定对象进行顺序比较。 当此对象小于、等于或大于指定对象时,返回负整数、零或正整数。

2. 比较器

一个比较接口,它对某些对象集合进行排序。

可以将比较器(new了一个实现了comparator接口的对象)传递给排序方法(例如Collections.sort或Arrays.sort)。

用法场景:

如果这个类是我们自己写的,需要比较排序, 实现Comprable, 如果不是我们自己写的代码, 我们无法修改的代码, 通过comparator。

二,Comparable

public class Student implements Comparable<Student>{

    public String name;
    public Integer score;
    public Integer age;

    public Student(String name, Integer score, Integer age) {
        this.name = name;
        this.score = score;
        this.age = age;
    }

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

    /**
     * int aInt = gaoPeng.compareTo(tuEnXia);
     * 此对象指的是gaoPeng, 指定对象指的是tuEnXia
     * 将此对象与指定对象进行大小比较。当此对象小于、等于或大于指定对象时,返回负整数、零或正整数
     * @return
     */
    @Override
    public int compareTo(Student other) {
        int diff = this.score - other.score;
        return diff;
    }
}
public class ComparableDemo01 {
    public static void main(String[] args) {
        Student student1 = new Student("张三", 700, 19);
        Student student2 = new Student("李四", 666, 18);
        Student student3 = new Student("王麻子", 750, 19);
//        //1. 数组排序
//        Student[] students = {student1,student2,student3};
//        Arrays.sort(students);
//        System.out.println(Arrays.toString(students));

        //2, 集合的comparable排序
        ArrayList students = new ArrayList<>();
        students.add(student1);
        students.add(student2);
        students.add(student3);
//        Collections.sort(students);
//        System.out.println(students);
//这个地方要求传入一个Compartor, 如果传入是个null, arraylist将会自动调用本集合中对象的comparable方法
        students.sort(null);
        System.out.println(students);
    }
}

三,Comparator

public class PointComparator implements Comparator<Point> {

    @Override
    public int compare(Point point1, Point point2) {
        int diff = point1.x + point1.y - point2.x - point2.y;
        return diff;
    }
}
public class PointComparator {
    public static  void main(String[] args) {
        Point point1 = new Point(44, 55);
        Point point2 = new Point(58, 56);
        Point point3 = new Point(58, 96);
        //1,数组排序
//        Point[] points = {point1,point2,point3};
//        Arrays.sort(points,new PointComparator());
//        System.out.println(Arrays.toString(points));
        //2 集合排序
        LinkedList<Point> linkedList = new LinkedList<>();
        linkedList.add(point1);
        linkedList.add(point2);
        linkedList.add(point3);
//        Collections.sort(linkedList,new PointComparator());
//       linkedList.sort(new PointComparator());
//        System.out.println(linkedList);
        //3 通过匿名内部类排序
        Comparator<Point> comparator = new Comparator<Point>() {
            @Override
            public int compare(Point o1, Point o2) {
                int diff = o1.x + o1.y - o2.x - o2.y;
                return diff;
            }
        };
//        linkedList.sort(comparator);
        Collections.sort(linkedList,comparator);
        System.out.println(linkedList);
    }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9446

    浏览量

    156149
  • 比较器
    +关注

    关注

    14

    文章

    1887

    浏览量

    111439
  • 对象
    +关注

    关注

    1

    文章

    38

    浏览量

    17674
  • 整数
    +关注

    关注

    0

    文章

    13

    浏览量

    6678
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27114
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    比较输入噪声

    大家好,希望有人能帮上忙,我用16F1779做一些模拟的事情,我用的是所有的OPA模块,它仍然没有“干净”我的信号。所以我使用了一个比较的输出,它有点噪音,把RC LO通行证放在上面,得到了一个
    发表于 05-06 12:30

    请问比较问题的中断生成有哪些原因?

    嗨,大家好。我试着从比较输出信号的上升沿产生一个中断信号。我已经连接了60MHz时钟(我的PSoC5LP芯片的主时钟)到比较的时钟输入和ISR组件到
    发表于 07-30 12:00

    运放和比较区别

    运放和比较区别     运算放大器和比较如出一辙,简单的讲,比较
    发表于 03-11 21:55 3247次阅读

    比较电路

    Comparator比较电路:
    发表于 10-22 09:46 1445次阅读
    <b class='flag-5'>比较</b><b class='flag-5'>器</b>电路

    比较,比较原理是什么?

    比较,比较原理是什么? 比较(comparator
    发表于 03-22 13:49 6573次阅读

    如何区别放大器及比较

    运放和比较区别:  比较和运放虽然在电路图上符号相同,但这两种器件确有非常大的区别,一般不
    发表于 06-25 17:23 5176次阅读

    MAX9686模拟比较

    MAX9686-signal/dual very fast TTL output comparator模拟TTL输出比较
    发表于 12-01 11:47 8次下载

    运放和比较区别

    运放和比较区别,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-11 18:18 19次下载

    ComparableComparator分析比较

    的对象可以用作有序映射(如TreeMap)中的键或有序集合(TreeSet)中的元素,而不需要指定比较Comparable 定义 Comparable 接口仅仅只包括一个函数,它
    发表于 09-27 14:49 0次下载

    利用比较电路方便地转换电平和极性,use comparator circuit to convert electric polarity

    利用比较电路方便地转换电平和极性,use comparator circuit to convert electric polarity 关键字:比较
    的头像 发表于 09-20 18:33 1277次阅读

    MSP430FR6972的Comparator E比较模块的使用

    最近做一个拓扑识别模块用到了MSP430的比较Comparator E),这个比较还是蛮好用的,支持多个参考,支持
    发表于 12-16 16:55 10次下载
    MSP430FR6972的<b class='flag-5'>Comparator</b> E<b class='flag-5'>比较</b><b class='flag-5'>器</b>模块的使用

    比较芯片和运放电路的区别

    比较芯片和运放电路的区别  比较芯片和运放电路都是电路中常用的模拟电路元件。虽然它们在外形和使用方法上有些相似,但它们在工作原理、应用范
    的头像 发表于 10-23 10:19 2366次阅读

    比较和运放的区别 比较和运放的功能是否相同,能相互代替?

    比较和运放的区别 比较和运放的功能是否相同,能相互代替? 比较
    的头像 发表于 11-22 16:17 2427次阅读

    迟滞比较和滞回比较是一样的吗

    迟滞比较和滞回比较是两种不同的电路,它们在功能和应用上有所区别。 迟滞比较
    的头像 发表于 07-11 09:26 4256次阅读

    滞回比较和双全比较有什么区别

    滞回比较(Hysteresis Comparator)和双全比较(这里假设“双全比较
    的头像 发表于 08-08 15:52 1148次阅读