Java中可比和比较器之间的区别

作者: Laura McKinney
创建日期: 1 四月 2021
更新日期: 15 可能 2024
Anonim
【Java面试题】堆和栈的区别
视频: 【Java面试题】堆和栈的区别

内容

Comparable和Comparator都是Java中用于比较对象数据元素的通用接口。 Comparable接口存在于java.lang包中,而Comparator接口存在于java.util包中。 Comparable和Comparator接口之间的基本区别是Comparable接口提供了单个排序序列,而Comparator接口提供了多个排序序列。比较表和比较器接口之间还有其他差异,我们将在比较表中进行研究。


  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础可比比较器
基本的 可比较接口仅允许单个排序序列。比较器界面允许多个排序序列。
配套 Comparable接口存在于java.lang包中。Comparator接口位于java.util包中。
方法 可比接口仅包含单个方法
公共诠释compareTo(Object obj);
比较器接口包含两种方法
public int compare(Object obj1,Object obj2)
布尔值equals(Object obj)
实作可比较接口由要比较其对象的类实现。比较器接口由一个单独的类实现,而不是由要比较其对象的类实现。
比较方式 compareTo(Object obj)方法将用于调用该方法的对象与传递给该方法的指定对象进行比较。compare(Object obj1,Object obj2)方法比较传递给该方法的两个指定对象。
列表/数组当必须比较可比较类型的对象的列表时,Collection类提供一种方法,即Collections.sort(List lst)。当必须比较可比较类型的对象列表时,Collection类提供了一种方法,即
Collections.sort(列表,比较器)。

可比性的定义

Comparable是java.lang包中可用的接口。一个类实现Comparator接口,以自然顺序对其对象排序。对象以自然顺序排序意味着对象将通过其ASCII值进行比较。实现Comparable接口的类是Byte,Character,Double,Float,Long,Short,String和Integer类。甚至Date和Calander类也实现了Comparable接口。


Comparable接口仅包含一个方法CompareTo(Object obj)。该方法将用于调用该方法的对象与参数中指定的对象进行比较。该方法的语法如下:

公共诠释compareTo(Object obj);

CompareTo(Object obj)方法返回 0,当通过方法比较的两个对象都包含相同的值时,它将返回 -ve 如果调用对象小于指定对象,则返回值,然后返回 + ve 如果调用的对象比指定的对象具有更大的值,则返回value。Collections类提供了一种用于对列表元素进行排序的sort方法。可以使用“ Collections.sort(List lst)”方法对Comparable类型的列表(和数组)元素进行排序。

比较器的定义

比较器是java.util包中可用的接口。接口Comparator没有在要比较其对象的类上实现,而是单独的类实现Comparator接口,以便将排序逻辑应用于不同类中对象的每个数据元素。比较器包含以下两种方法:

public int compare(Object obj1,Object obj2)和boolean equals(Object obj)

上面的compare()方法将第一个对象obj1与第二个对象obj2进行比较。 compare()方法返回 0 当通过方法比较的两个对象都包含相同的值时,它将返回 -ve 如果对象obj1小于对象obj2则返回值,并返回 + ve 如果对象obj1比对象obj2具有更大的值,则返回value。 equals()方法检查指定的对象是否等于调用对象。 equals()方法返回 真正 如果两个比较对象相等,则返回。 Collections类提供了对列表和比较器类型的元素进行排序的方法。比较器类型的列表元素是通过Collections.sort(List,Comparator)方法排序的。


  1. 可比接口允许单个排序序列,这意味着您只能在compareTo()方法中比较对象的单个数据元素。比较器接口允许多个排序序列,这意味着您可以比较对象的多个数据元素。
  2. Comparable接口由要比较其对象的类实现,因为排序逻辑是在同一类中定义的。另一方面,Comparator接口不是由要比较其对象的类实现的,因为排序逻辑是在单独的类中定义的,其中每个类在对象的单个数据元素上定义排序,并且这些定义的类实现Comparator接口。
  3. Comparable接口位于java.lang包中,而Comparator接口位于java.util包中。
  4. Comparable接口仅声明一个方法compareTo(Object obj),而Comparator接口则声明两个方法,compare(Object obj1,Object obj2)和equals(Object obj)。
  5. Comparable中的compareTo(Object obj)方法将调用方法的对象与传递给该方法的指定对象进行比较,而Comparator的compare(Object obj1,Object obj2)方法将传递给该方法的对象obj1与obj2进行比较。
  6. Collections类提供了一种排序方法“ Collections.sort(List lst)”,用于对Comparable类型的对象进行排序。 Collections类提供了排序方法Collections.sort(List,Comparator)来对Comparator类型的对象进行排序。

结论:

如果要按自然顺序对对象进行排序,则可以使用可比较的接口,否则要根据任何属性对对象进行排序,则可以使用Comparator接口。