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.sortCollections.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;主要区别如下:

Comparator 与 Comparator 的区别 Java
Comparator 与 Comparator 的区别 Java

比较基础 可比 比较
付款方式 可比提供 compareTo() 方法对元素进行排序 Java. 比较器提供 compare() 方法对元素进行排序 Java.
小包装 类似的界面存在于 java.lang 包。 比较器接口位于 java.util 包。
排序逻辑 排序的逻辑必须与要排序的对象属于同一类。 排序的逻辑应该放在单独的类中,以便根据对象的不同属性编写不同的排序。
类对象 想要排序的对象类必须实现 Comparable 接口。 您想要排序的对象类不需要实现比较器接口。
排序序列 它提供单一排序序列。 它提供了多种排序顺序。
排序顺序 该方法可以按照自然排序顺序对数据进行排序。 该方法按照自定义的排序方式对数据进行排序。
增益级 它会影响原始类别。即,实际类别被改变。 它不会影响原始课程,即实际课程不会改变。
用法 在 API 中,日历、包装类、日期和
字符串。
它用于对第三方类的实例进行排序。
实施 所有包装类和字符串类都实现了类似的接口。 Comparator 唯一实现的类是 Collat​​or 和 RuleBasedColator。

使用 Comparator 和 Comparable 的最佳实践 Java

  • 当比较对于特定类来说是标准的时候,使用可比较的接口。
  • 您可以将 lambda 与比较器一起使用。
  • 许多可用的核心类都实现了类似的接口。
  • 对 Set 或 Map 进行排序时可以使用 TreeSet 和 TreeMap。
  • - compareTo() 方法适用于比较器以及可比较器。
  • 仅当您需要更多灵活性时才使用比较器接口。
  • - compareTo() 如果第一个对象大于另一个对象,则方法将返回一个正整数;如果第一个对象小于另一个对象,则方法将返回负整数;如果两者相同,则方法将返回零。

如何在可比较项和比较器之间进行选择

总之,我的实践经验表明,利用 Comparable 和 Comparator Java 显著提升了我们对数据排序的控制力,增强了性能和功能。