Comparable と Comparator はどちらもインターフェイスであり、コレクション要素の並べ替えに使用できます。
ただし、Comparable インターフェイスと Comparator インターフェイスの間には、以下に示す多くの違いがあります。
ブール値から文字列 Java へ
匹敵します | コンパレータ |
---|---|
1) Comparable は、 単一の並べ替えシーケンス 。つまり、ID、名前、価格などの単一の要素に基づいてコレクションを並べ替えることができます。 | コンパレータが提供するのは、 複数の並べ替えシーケンス 。つまり、ID、名前、価格などの複数の要素に基づいてコレクションを並べ替えることができます。 |
2) 比較可能 元のクラスに影響を与える つまり、実際のクラスが変更されます。 | コンパレータ 元のクラスには影響しません つまり、実際のクラスは変更されません。 |
3) 同等のサービス CompareTo() メソッド 要素を並べ替えます。 | コンパレータが提供するもの Compare() メソッド 要素を並べ替えます。 |
4) 類似品が存在する java.lang パッケージ。 | コンパレータは java.util パッケージ。 |
5) Comparable 型のリスト要素を次の基準で並べ替えることができます。 コレクション.sort(リスト) 方法。 | Comparator タイプのリスト要素を次の基準で並べ替えることができます。 Collections.sort(リスト、コンパレータ) 方法。 |
Java の比較可能な例
年齢に基づいてリスト要素を並べ替える Comparable インターフェイスの例を見てみましょう。
ファイル: TestSort3.java
//Java Program to demonstrate the use of Java Comparable. //Creating a class which implements Comparable Interface import java.util.*; import java.io.*; class Student implements Comparable{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int compareTo(Student st){ if(age==st.age) return 0; else if(age>st.age) return 1; else return -1; } } //Creating a test class to sort the elements public class TestSort3{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); Collections.sort(al); for(Student st:al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } }今すぐテストしてください
出力:
105 Jai 21 101 Vijay 23 106 Ajay 27
Java コンパレータの例
さまざまなコンパレーターを使用してリストの要素をソートする Java Comparator インターフェースの例を見てみましょう。
Javaプログラミングを切り替えるStudent.java
class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } }AgeComparator.java
import java.util.*; class AgeComparator implements Comparator{ public int compare(Student s1,Student s2){ if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } }NameComparator.java
このクラスは、名前に基づいた比較ロジックを提供します。このような場合、内部的に比較ロジックを提供する String クラスの CompareTo() メソッドを使用します。
import java.util.*; class NameComparator implements Comparator{ public int compare(Student s1,Student s2){ return s1.name.compareTo(s2.name); } }テストコンパレータ.java
このクラスでは、名前と年齢に基づいてソートしてオブジェクトの値を出力します。
//Java Program to demonstrate the use of Java Comparator import java.util.*; import java.io.*; class TestComparator{ public static void main(String args[]){ //Creating a list of students ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); System.out.println('Sorting by Name'); //Using NameComparator to sort the elements Collections.sort(al,new NameComparator()); //Traversing the elements of list for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('sorting by Age'); //Using AgeComparator to sort the elements Collections.sort(al,new AgeComparator()); //Travering the list again for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } }
出力:
Sorting by Name 106 Ajay 27 105 Jai 21 101 Vijay 23 Sorting by Age 105 Jai 21 101 Vijay 23 106 Ajay 27