1

これが私のコードです

class ComparableTest
{
    public static void main(String[] args)
    {
        BOX[] box = new BOX[5];
        box[0] = new BOX(10,8,6); 
        box[1] = new BOX(5,10,5);
        box[2] = new BOX(8,8,8);
        box[3] = new BOX(10,20,30);
        box[4] = new BOX(1,2,3);
        Arrays.sort(box);
        for(int i=0;i<box.length;i++)
            System.out.println(box[i]);
    }
}

また、Comparableを実装するクラスBOXがあります。今、皆さんに助けていただきたい質問がいくつかあります。

1.メソッドは、同等のインターフェイスで宣言され、システムで定義されていますcompareToか?

2. Arrays.sort メソッドの実装を提供しませんでした。その場合、どのように要素をソートしますか?

3.Comparatorの代わりに使用するときはcomparable、次を使用します。

class comparatorTest
{
    public static void main(String args[])
    {
        Student[] students = new Student[5];
        Student[0] = new Student(“John”,”2000A1Ps234”,23,”Pilani”);
        Student[1] = new Student(“Meera”,”2001A1Ps234”,23,”Pilani”);
        Student[2] = new Student(“Kamal”,”2001A1Ps344”,23,”Pilani”);
        Student[3] = new Student(“Ram”,”2000A2Ps644”,23,”Pilani”);
        Student[4] = new Student(“Sham”,”2000A7Ps543”,23,”Pilani”);    
        // Sort By Name
        Comparator c1 = new studentbyname();
        Arrays.sort(students,c1);
        for(int i=0;i<students.length;i++)
            System.out.println(students[i]);
    }
}

//上記のコードでは、しかし、ボックスはまだ.iestudentbyname implements comparatorを実装していますcomparable

class studentbyname implements comparator
{
    public int compare(Object o1,Object o2)
    {  
        Student s1 = (Student) o1;
        Student s2 = (Student) o2;
        return s1.getName().compareTo(s2.getName());
    }
}

今私はやっていますがArrays.sort(students,c1)、なぜ今c1を渡しているのですか?

4

3 に答える 3

3
  1. Comparable契約を満たすには、少なくともcompareToメソッドが必要です。クラスには、必要な数の追加メソッドを含めることができます。

  2. Comparableインターフェイスに基づいて、要素を自然な順序で並べ替えます。したがって、並べ替えは要素間でcompareToを呼び出して、それらを配置する順序を確認します。

  3. Comparatorをsortメソッドに提供すると、(a) Comparableを実装していない要素、または (b) クラスのComparable実装で定義されている「自然な順序」以外の順序で並べ替えたい要素の並べ替えが可能になります。

Comparator を sort に渡すと、要素の compareTo メソッド (実装されている場合) ではなく、Comparator の compare メソッドが呼び出されます。

インターフェイスとはを参照してください

コンパレータを参照

比較可能を参照

于 2011-09-21T14:58:59.370 に答える
1
  1. Comparableを実装している限り、 で必要な数のメソッドを定義できますcompareTo。このメソッドは、比較のためにクラスをチェックする多くの状況で使用できます。たとえば、インスタンスを順序付けられた に挿入する場合TreeSetcompareToクラスのすべてのインスタンスの一般的な順序規則を提供します。
  2. Arrays.sortその要素の自然な順序で配列を並べ替えます。つまり、 を使用しcompareToます。
  3. を使用Comparatorして、カスタム順序付けルールを定義できます。テーブルがある場合と同様に、その列のいずれかで並べ替えることができます。Comparatorその列ごとに を定義することができ、クラス固有の順序付けルール (クラスが表す現実に関連するものとして) をクラスの で定義することもできますcompareTo
于 2011-09-21T15:01:30.733 に答える
0

Comparableを実装すると、 compareTo()の実装を提供することが義務付けられます。

Arrays.sort(Object[])メソッドに渡される Object 配列内のすべての要素は、Comparableを実装する必要があります。代わりにComparatorを使用する場合は、パラメーターとして a を受け取る Arrays.sort()メソッドを使用する必要がComparatorあります。上記の例で使用するメソッドはComparator、2 番目のパラメーターとして a を受け取ります。したがって、c1メソッド呼び出しで提供する必要があります。

于 2011-09-21T14:59:26.280 に答える