首页 > 其他分享 >Comparator和comparable的区别

Comparator和comparable的区别

时间:2023-04-17 21:36:14浏览次数:32  
标签:comparable name Comparator 区别 age 接口 compareTo 排序 public

区别:

  comparator接口实际上是出自java.util包,它有一个compare(Object obj1, Object obj2)方法用来排序(比较器)

  comparable接口实际上是出自java.lang包,它有一个compareTo(Object obj)方法用来排序(排序接口)

Comparator定制排序:

  compare方法中调用的是对象实现comparable接口重写的compareTo方法。

// void sort(List list),按自然排序的升序排序
Collections.sort(arrayList);

// 定制排序的用法//降序
Collections.sort(arrayList, new Comparator<Integer>() {
      @Override
       public int compare(Integer o1, Integer o2) {
               return o2.compareTo(o1);
      }
});

Comparable接口:

  重写 compareTo 方法实现按年龄来排序:

// person对象没有实现Comparable接口,所以必须实现,这样才不会出错,才可以使treemap中的数据按顺序排列
// 前面一个例子的String类已经默认实现了Comparable接口,另外其他像Integer类等都已经实现了Comparable接口,所以不需要另外实现了
public  class Person implements Comparable<Person> {
    private String name;
    private int age;

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    /**
     * T重写compareTo方法实现按年龄来排序
     */
    @Override
    public int compareTo(Person o) {
        if (this.age > o.getAge()) {
            return 1;
        }
        if (this.age < o.getAge()) {
            return -1;
        }
        return 0;
    }
}

 

总结:

  comparator接口出自java.util包,是一个比较器,它有一个compare(Object o1, Object o2)方法用来排序,compare方法中调用的是对象实现comparable接口重写的compareTo方法。

  comparable排序接口出自java.lang包,它有一个compareTo(Object o)方法用来排序,主要是对象实现comparable接口重写 compareTo 方法实现按某字段排序。

标签:comparable,name,Comparator,区别,age,接口,compareTo,排序,public
From: https://www.cnblogs.com/cjhtxdy/p/17327573.html

相关文章

  • canvas和svg区别
    Canvas描述:通过Javascript来绘制2D图形。是逐像素进行渲染的。其位置发生改变,会重新进行绘制。SVG描述:一种使用XML描述的2D图形的语言SVG基于XML意味着,SVGDOM中的每个元素都是可用的,可以为某个元素附加Javascript事件处理器。在SVG中,每个被绘制的图形均被视为对象。如果SVG......
  • rpc rmi区别
    1.RMI和RPC之间最主要的区别在于方法是如何别调用的。在RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参......
  • firewalld 和 iptables 区别
    在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。firewalld跟iptables比起来至少有两大好处:1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以......
  • Jedis与RedisTemplate的区别
    Jedis与RedisTemplate的区别:Jedis是Redis官方推荐的、面向Java的操作Redis的客户端,可以用JedisPool来获得连接进行get、set、del等操作相对简单,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说,可以方便地更换Redis的Java客户端,还......
  • GCP-Bigquery- IFNULL() 和 NULLIF() 的区别和例子
    NULLIF(expr,expr_to_match)BigQueryNULLIF()DescriptionNULLisreturnedifexpr=expr_to_matchistrue,otherwise,exprisreturned.exprandexpr_to_matchmustbeimplicitlycoercibletoacommonsupertypeandcomparable.如果2个结果相同,返回null值,否则返......
  • CSS引入方式及link和@import的区别
    1.概述1.1说明在项目开发中,我们经常使用css样式使页面丰富多彩,编写过程中,CSS有四种引入方式。 2.CSS引入方式2.1 引入方式一:内联样式内联样式(行内样式):直接在HTML标签中的style属性中添加CSS<divstyle="width:200px;height:200px;background:red;"></div>内联......
  • network 路由器和交换机的区别
    目录network路由器和交换机的区别如果在公司内部搭建一个网络,应该使用路由器还是交换机?network路由器和交换机的区别路由器和交换机是网络中两个不同的设备,它们的功能和作用有所不同,主要区别如下:工作层次不同:交换机主要工作在OSI模型的第二层,即数据链路层,它通过MAC地址来转......
  • 关于增值业务和电信运营区别的对话
    文佳-买卖网站频道说:好青润说:好。文佳-买卖网站频道说:忙吗》?青润说:呵呵,今天还行。明天回老家一趟,下周一就到北京了。文佳-买卖网站频道说: 你现在是那家公司啊?青润说:没有公司。呵呵文佳-买卖网站频道说:?自己当老板了//还是政......
  • sha256 和hamc-sha256区别
    签名哈希函数SHA-256:SHA-256是全称为SecureHashAlgorithm256(安全散列算法256)的缩写。SHA-256可以将任意长度的数据计算成一个长度为256位的哈希值,在数字签名中得到广泛应用。SHA-512:SHA-512是SHA-256的加强版,可以生成更长、更不易被碰撞的消息摘要。在一些对于安全......
  • JS中Map、WeakMap和Object的区别
    JavaScript中的Map、WeakMap和Object都是用于存储键值对的数据结构:1.Map:Map是一种新的数据结构,它允许使用任何数据类型(包括对象和基本数据类型)作为键。Map的一些特性包括:-保持键的插入顺序:当遍历Map时,键值对会按照插入顺序返回。-键可以是任意类型:与Object不同,Map的键可以......