Comparable 与 Comparator 的比较 Java
Comparator 与 Comparator 之间的主要区别 Java
- 可比于 Java 是一个用来将自身与另一个对象进行比较的对象,而 Comparator 是一个用于比较不同类的不同对象的对象。
- Comparable 提供
compareTo()
方法对元素进行排序 Java而 Comparator 提供了compare()
方法对元素进行排序 Java. - 类似的界面存在于
java.lang
包中,而 Comparator 接口存在于java.util
包。 - Comparable 提供单一排序序列,而 Comparator 提供多个排序序列。
- Comparable 影响原始类,而 Comparator 不会影响原始类。

在这里,我分析了comparative和Comparator之间的区别,并将全面评估它们的优缺点。
什么可以与 Java?
可比 in Java 是一个将自身与另一个对象进行比较的对象。它有助于对自定义对象列表进行排序。 Java.lang.可比较接口应由类实现,以便比较其实例。实现可比较接口的对象数组按以下方式自动排序: Arrays.sort
和 Collections.sort
方法。
可比性中使用的方法
我想强调一下我在 Comparable 接口中经常使用的重要的方法:
相比于():
CompareTo() 方法用于对字符串进行自然排序。自然排序的含义是适用于对象的排序顺序,例如,对整数进行排序的数字顺序、对字符串进行排序的字母顺序等。
的语法 CompareTo()
方法如下:
int compareTo(T obj)
在上面的语法中,T 表示要比较的对象的类型。
CompareTo()
方法将该对象与 T obj 进行比较。
输出:
- 如果值相等则返回 0。
- 如果对象具有较低的值,则此方法返回负值。
- 如果对象具有更高的值,则返回正值。
可比性示例 Java
以下程序 Java 可比较示例显示两个字符“a”和“b”的比较。字符“a”按字母顺序位于“b”之前。
因此输出为 -1。字符“b”按字母顺序位于“a”之后。因此输出为 1。字符“a”和“b”都是等效的。因此输出为 0。
public class Sample_String { public static void main(String[] args) { String str_Sample = "a"; System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b")); str_Sample = "b"; System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a")); str_Sample = "b"; System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b")); } }
输出
Compare To 'a' b is : -1 Compare To 'b' a is : 1 Compare To 'b' b is : 0
比较器是什么 Java?
比较器 in Java 是用于比较不同类的不同对象的对象。 Java 也用于排列用户自定义类的对象,它包括两个重要的比较器接口方法,分别是compare(Object obj1, Object obj2)和equals(Object element)。
比较器中使用的方法
在我的实践中,我经常依赖比较器接口的以下关键方法:
比较():
Compare()
使您可以对对象进行排序。为此,您必须创建一个实现比较器接口的类。之后,您需要重写其比较方法。
的语法 compare()
方法如下:
compare(Object obj1, Object obj2)
在上面的语法中,obj1 和 obj2 是两个必须使用 compare() 方法进行比较的对象。 compare()
方法。
输出:
- 如果第一个参数小于第二个参数,则返回一个负整数。
- 如果第一个参数和第二个参数相等,则返回零。
- 如果第一个参数大于第二个参数,则此方法可以返回一个正整数。
您必须确保关系是可传递的。例如,((compare(a, b)>0) && (compare(b, c)>0)) 意味着 compare(a, c)>0。
可比性示例 Java
在下面 Java 比较器示例,有 6 个 变量“x”、“y”、“p”、“q”、“r”和“s”。输出为 -1,因为“x”的值 20 小于“y”的值 30。输出为 0,因为“p”的值 40 等于“q”的值 40。
import java.lang.Integer; public class example { public static void main(String args[]) { int x = 20; int y = 30; // as 10 less than 20, // Output will be a value less than zero System.out.println(Integer.compare(x, y)); int p = 40; int q = 40; // as 30 equals 30, // Output will be zero System.out.println(Integer.compare(p, q)); int r = 20; int s = 7; // as 15 is greater than 8, // Output will be a value greater than zero System.out.println(Integer.compare(r, s)); } }
输出:
-1 0 1
等于():
Equals()
验证数字对象是否等于作为参数传递的对象。
的语法 equals()
方法如下:
public boolean equals(Object o)
此方法采用两个参数:1) 任何对象,2) 返回值。如果传递的参数不为 null,并且是具有相同数值的类似类型的对象,则返回 true。
Equals 方法示例:
在下面的例子中,我将比较这四个变量。三个变量为整型,一个变量为短整型。第一个结果为 false,因为 p 的值(5)不等于 q 的值(20)。
第二个结果为真,因为变量 p 和 r 的值相同,均为 5。最后,输出为假,因为变量 p 和 s 具有不同的指定值。
public class Test { public static void main(String args[]) { Integer p = 5; Integer q = 20; Integer r =5; Short s = 5; System.out.println(p.equals(q)); System.out.println(p.equals(r)); System.out.println(p.equals(s)); } }
输出
false true false
Comparable 和 Comparator 之间的区别 Java
我经常看到以下混淆 Java Comparable 和 Comparator;主要区别如下:
比较基础 | 可比 | 比较 |
---|---|---|
付款方式 | 可比提供 compareTo() 方法对元素进行排序 Java. |
比较器提供 compare() 方法对元素进行排序 Java. |
小包装 | 类似的界面存在于 java.lang 包。 |
比较器接口位于 java.util 包。 |
排序逻辑 | 排序的逻辑必须与要排序的对象属于同一类。 | 排序的逻辑应该放在单独的类中,以便根据对象的不同属性编写不同的排序。 |
类对象 | 想要排序的对象类必须实现 Comparable 接口。 | 您想要排序的对象类不需要实现比较器接口。 |
排序序列 | 它提供单一排序序列。 | 它提供了多种排序顺序。 |
排序顺序 | 该方法可以按照自然排序顺序对数据进行排序。 | 该方法按照自定义的排序方式对数据进行排序。 |
增益级 | 它会影响原始类别。即,实际类别被改变。 | 它不会影响原始课程,即实际课程不会改变。 |
用法 | 在 API 中,日历、包装类、日期和 字符串。 |
它用于对第三方类的实例进行排序。 |
实施 | 所有包装类和字符串类都实现了类似的接口。 | Comparator 唯一实现的类是 Collator 和 RuleBasedColator。 |
使用 Comparator 和 Comparable 的最佳实践 Java
- 当比较对于特定类来说是标准的时候,使用可比较的接口。
- 您可以将 lambda 与比较器一起使用。
- 许多可用的核心类都实现了类似的接口。
- 对 Set 或 Map 进行排序时可以使用 TreeSet 和 TreeMap。
- -
compareTo()
方法适用于比较器以及可比较器。 - 仅当您需要更多灵活性时才使用比较器接口。
- -
compareTo()
如果第一个对象大于另一个对象,则方法将返回一个正整数;如果第一个对象小于另一个对象,则方法将返回负整数;如果两者相同,则方法将返回零。
如何在可比较项和比较器之间进行选择
总之,我的实践经验表明,利用 Comparable 和 Comparator Java 显著提升了我们对数据排序的控制力,增强了性能和功能。