比較対象と比較対象 Java

比較対象と比較対象者の主な違い 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 で使用される手法

Comparable インターフェイスで頻繁に使用する重要なメソッドを強調したいと思います。

CompareTo():

CompareTo() メソッドは、文字列の自然なソートを実行するために使用されます。自然なソートとは、オブジェクトに適用されるソート順序のことです。たとえば、整数の場合は数値順、文字列の場合はアルファベット順などです。

の構文 CompareTo() メソッドは次のとおりです。

int compareTo(T obj)

上記の構文では、T は比較するオブジェクトのタイプを表します。

CompareTo() メソッドはオブジェクトを T obj と比較します。

出力:

  • 値が等しい場合は 0 を返します。
  • オブジェクトの値が小さい場合、このメソッドは負の値を返します。
  • オブジェクトの値が大きい場合は、正の値を返します。

類似の例 Java

次のプログラムは Java 比較可能な例では、2 つの文字「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) と呼ばれる XNUMX つの重要な比較インターフェイス メソッドが含まれます。

コンパレータで使用されるメソッド

私の実務では、コンパレータ インターフェイスの次の重要なメソッドを頻繁に利用しています。

比較する():

Compare() オブジェクトを注文できるようになります。これを行うには、コンパレータ インターフェイスを実装するクラスを作成する必要があります。この後、その比較メソッドをオーバーライドする必要があります。

の構文は、 compare() メソッドは次のとおりです。

compare(Object obj1, Object obj2)

上記の構文では、obj1 と obj2 は、compare() メソッドを使用して比較する必要がある XNUMX つのオブジェクトです。 compare() 方法。

出力:

  • 最初の引数が XNUMX 番目の引数より小さい場合は、負の整数を返します。
  • 最初の引数と 2 番目の引数が等しい場合は、0 を返します。
  • このメソッドは、最初の引数が 2 番目の引数より大きい場合に、正の整数を返すことができます。

関係が推移的であることを確認する必要があります。 たとえば、((compare(a, b)>0) && (compare(b, c)>0)) は、compare(a, c)>0 を意味します。

類似の例 Java

以下で Java 比較器の例には6つあります variables。 「x」、「y」、「p」、「q」、「r」、および「s」。 出力は、「x」の値として -1、20 は「y」の値、30 より小さいです。「p」の値、0 は「q」の値、40 と等しいため、出力は 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) 任意のオブジェクト、および XNUMX) 戻り値。渡された引数が null ではなく、同じ数値を持つ同様の型のオブジェクトである場合、true を返します。

Equals メソッドの例:

以下の例では、5 つの変数を相互に比較します。 20 つの変数は integer 型で、XNUMX つは short 型です。 p の値 (XNUMX) が q の値 (XNUMX) と等しくないため、最初の結果は false になります。

変数 p と r の値が同じ 5 であるため、XNUMX 番目の結果は true になります。最後に、変数 p と s に異なる値が割り当てられているため、出力は false になります。

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と比較子の違い Java

私はよく、 Java Comparable と Comparator の主な違いは次のとおりです。

比較対象と比較子の違い Java
比較対象と比較子の違い Java

比較基準 匹敵します コンパレータ
方法 同等のサービスを提供 compareTo() 要素をソートする方法 Java. コンパレータが提供するもの compare() 要素をソートする方法 Java.
パッケージ 同等のインターフェイスが存在します java.lang パッケージ。 コンパレータインターフェイスが存在します java.util パッケージ。
ソートのロジック 並べ替えのロジックは、並べ替えるオブジェクトと同じクラス内にある必要があります。 オブジェクトのさまざまな属性に基づいてさまざまな並べ替えを記述するには、並べ替えのロジックを別のクラスに含める必要があります。
クラスオブジェクト オブジェクトを並べ替えるクラスは、Comparable インターフェイスを実装する必要があります。 オブジェクトをソートするクラスは、コンパレータ インターフェイスを実装する必要はありません。
並べ替えシーケンス 単一の並べ替えシーケンスを提供します。 複数の並べ替えシーケンスを提供します。
並べ替え順序 この方法では、自然な並べ替え順序に従ってデータを並べ替えることができます。 このメソッドは、カスタマイズされた並べ替え順序に従ってデータを並べ替えます。
CLASS 元のクラスに影響します。 つまり、実際のクラスが変更されます。 元のクラスには影響しません。つまり、実際のクラスは変更されません。
使用法 カレンダー、ラッパー クラス、日付、および日付によって API に頻繁に実装されます。
文字列。
これは、サードパーティ クラスのインスタンスを並べ替えるために実装されています。
実施する すべてのラッパー クラスと文字列クラスは同等のインターフェイスを実装します。 Comparator で実装されているクラスは Collat​​or と RuleBasedColator だけです。

ComparatorとComparableを使用する際のベストプラクティス Java

  • 比較が特定のクラスの標準である場合は、同等のインターフェイスを使用します。
  • ラムダをコンパレータとともに使用できます。
  • 利用可能なコア クラスの多くは、同等のインターフェイスを実装しています。
  • Set または Map をソートするときに TreeSet および TreeMap を使用することができます。
  • この compareTo() このメソッドはコンパレータだけでなくコンパレータでも機能します。
  • コンパレータ インターフェイスは、より柔軟性が必要な場合にのみ使用してください。
  • この compareTo() このメソッドは、最初のオブジェクトが他のオブジェクトより大きい場合は正の整数を返し、小さい場合は負の整数を返し、両方が同じ場合はゼロを返します。

Comparable と Comparator のどちらを選択するか

結論として、私の実際の経験から、ComparableとComparatorを活用することで、 Java データのソートに対する制御が大幅に向上し、パフォーマンスと機能性の両方が向上します。