Java中comparator接口和Comparable接口的比较解析

 更新时间:2023年08月07日 09:31:24   作者:键盘林  
这篇文章主要介绍了Java中comparator接口和Comparable接口的比较解析,Java提供了一个用于比较的接口Comparator和Comparable接口,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法,需要的朋友可以参考下

Java提供了一个用于比较的接口Comparator和Comparable接口,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法。

一、comparator接口

1、list的比较

如果要使用list的sort方法需要实现一个Comparator接口,自定义比较方式

 public static void main(String[] args) {
        List<Integer> list= new ArrayList<>();
        list.add(20);
        int i=0;
        while (i<10){
            list.add(i++);
        }
        list.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if (o1.intValue()>o2.intValue()){
                    return 1;
                }else if (o1.intValue()<o2.intValue()){
                    return -1;
                }
                return 0;
            }
        });
        System.out.println(list.toString());
    }

2、数组的比较

同理

Integer[] ins = {3, 5, 1, 6, 7};
        Arrays.sort(ins, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if (o1.intValue()>o2.intValue()){
                    return 1;
                }else if (o1.intValue()<o2.intValue()){
                    return -1;
                }
                return 0;
            }
        });
        System.out.println(Arrays.toString(ins));

二、Comparable接口

该接口是需要被你所需要排序的类所实现,违反了开闭原则。

需要排序的类实现comparable接口的方法

public class   Person implements Comparable<Person> {
    public Integer getAge() {
        return age;
    }
    public Person(Integer age){
        this.age=age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    private Integer age;
    @Override
    public int compareTo(Person o) {
        return this.age<o.getAge()?1:(this.age==o.getAge()?0:-1);
    }
}
public static void main(String[] args) {
        Person[] peoples={new Person(20),new Person(50),new Person(10)};
        Arrays.sort(peoples);
        System.out.println(Arrays.toString(peoples));
    }

运行结果

综合来说使用comparator接口更符合开发原则!

Comparator 和 Comparable 比较

Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。

而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。

我们不难发现:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

到此这篇关于Java中comparator接口和Comparable接口的比较解析的文章就介绍到这了,更多相关Java的comparator接口和Comparable接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ThreadLocal原理介绍及应用场景

    ThreadLocal原理介绍及应用场景

    本文详细讲解了ThreadLocal原理介绍及应用场景,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Java中StringUtils工具类进行String为空的判断解析

    Java中StringUtils工具类进行String为空的判断解析

    这篇文章主要介绍了Java中StringUtils工具类进行String为空的判断解析,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • SpringBoot jackson 精度处理问题解决

    SpringBoot jackson 精度处理问题解决

    由于JavaScript处理的最大数值限制,较大的雪花ID在JS中容易溢出,为解决此问题,可在SpringMVC或SpringBoot中使用@RequestBody注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Java URL编码与解码基础详解

    Java URL编码与解码基础详解

    这篇文章主要介绍了Java URL编码与解码基础详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • java父类和子类初始化顺序的深入理解

    java父类和子类初始化顺序的深入理解

    本篇文章是对java父类和子类初始化顺序进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Java中的回调机制使用方式

    Java中的回调机制使用方式

    回调机制是一种编程模式,允许对象在特定事件触发时反向调用调用方,Java中通过接口、抽象类或Lambda实现,支持同步与异步操作,广泛用于事件处理、异步编程等场景,具有解耦优势但也存在回调地狱等维护难题
    2025-08-08
  • java-collection中的null,isEmpty用法

    java-collection中的null,isEmpty用法

    这篇文章主要介绍了java-collection中的null,isEmpty用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java 程序员容易犯的10个SQL错误

    Java 程序员容易犯的10个SQL错误

    本文介绍了Java 程序员容易犯的10个SQL错误。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Springboot使用Junit测试没有插入数据的原因

    Springboot使用Junit测试没有插入数据的原因

    这篇文章主要介绍了Springboot使用Junit测试没有插入数据的原因,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 用Java编写经典小程序

    用Java编写经典小程序

    非常实用的12种基础算法的经典案例,对于初学者来说有很大的帮助,数量有限需要的朋友可以参考下
    2018-04-04

最新评论