Java中可比和比较器之间的区别
内容
Comparable和Comparator都是Java中用于比较对象数据元素的通用接口。 Comparable接口存在于java.lang包中,而Comparator接口存在于java.util包中。 Comparable和Comparator接口之间的基本区别是Comparable接口提供了单个排序序列,而Comparator接口提供了多个排序序列。比较表和比较器接口之间还有其他差异,我们将在比较表中进行研究。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 可比 | 比较器 |
---|---|---|
基本的 | 可比较接口仅允许单个排序序列。 | 比较器界面允许多个排序序列。 |
配套 | 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)方法排序的。
- 可比接口允许单个排序序列,这意味着您只能在compareTo()方法中比较对象的单个数据元素。比较器接口允许多个排序序列,这意味着您可以比较对象的多个数据元素。
- Comparable接口由要比较其对象的类实现,因为排序逻辑是在同一类中定义的。另一方面,Comparator接口不是由要比较其对象的类实现的,因为排序逻辑是在单独的类中定义的,其中每个类在对象的单个数据元素上定义排序,并且这些定义的类实现Comparator接口。
- Comparable接口位于java.lang包中,而Comparator接口位于java.util包中。
- Comparable接口仅声明一个方法compareTo(Object obj),而Comparator接口则声明两个方法,compare(Object obj1,Object obj2)和equals(Object obj)。
- Comparable中的compareTo(Object obj)方法将调用方法的对象与传递给该方法的指定对象进行比较,而Comparator的compare(Object obj1,Object obj2)方法将传递给该方法的对象obj1与obj2进行比较。
- Collections类提供了一种排序方法“ Collections.sort(List lst)”,用于对Comparable类型的对象进行排序。 Collections类提供了排序方法Collections.sort(List,Comparator)来对Comparator类型的对象进行排序。
结论:
如果要按自然顺序对对象进行排序,则可以使用可比较的接口,否则要根据任何属性对对象进行排序,则可以使用Comparator接口。