3

次の方法で Arrays.sort() メソッドを使用してオブジェクトの配列をソートする方法を知っています。

Arrays.sort(array of primitive type);   
Arrays.sort(array of primitive type, from, to); 
Arrays.sort(array of an object type);   
Arrays.sort(array of an object type , from, to);    

しかし、次の2つの方法についてはわかりません。

Arrays.sort(array of an object type , comparator);  
Arrays.sort(array of an object type , from, to, comparator);    

これらのメソッドを使用して型オブジェクトの配列をソートする方法を誰か教えてください.java クラスへのコードまたはリンクを追加してください.検索しようとしましたが、見つかりませんでした.

ありがとう。

4

4 に答える 4

4

例:

class Person{  
   int id;  
   public getId(){return this.id;}  
//Other  stuff in your custom class
}  

Person[] persons = ...;//An array of person you get from somewhere
Arrays.sort(persons,new Comparator<Person>(){  
    @Override  
    public int compare(Person p1, Person p2){  
         return p1.getId() - p2.getId();  
   }  
} ); 
于 2013-02-13T21:28:12.760 に答える
1

それは簡単です:

Comparator Interface を使用すると、オブジェクトを並べ替える方法を制御できます。

オブジェクトは、賢明なキーに基づくことができます。

たとえば、Account オブジェクトは AccountNumber に基づいてソートする必要があります

class Account {
    String AccountNumber; //Key 1 
    String AccountName;   //Key 2
    String GovtID;        //Key 3 
}

3 つのキーのいずれかでソートできます。

並べ替えを制御するには、並べ替えに使用されるロジックを定義する Comparator インターフェイスを実装するクラスを定義する必要があります。

class SortAccountByNumber implements Comparator<Account> {
    //Implement Unimplemented method 
    @Override
    public int compare(Account a1, Account a2) {
        //Read the specification for this method here in the Java Doc.
        return 0;
    }

}

これを使用するには、単に呼び出します

  SortAccountByNumber varSortAccountByNumber = new SortAccountByNumber();
  Arrays.sort(arrayOfAccounts,varSortAccountByNumber);
于 2013-02-13T21:44:11.697 に答える
0

複雑なオブジェクトの場合、Javaはそれらを比較する方法を知りません。したがって、コンパレータを作成する必要があります。通常、比較する必要のあるクラスのメンバーを選択します。

public class Comp implements Comparator<Test> {

    @Override
    public int compare(Test t, Test t1) {
       return what_you_want_to_compare;
    }    
}
于 2013-02-13T21:36:51.073 に答える
0

コンパレータがインラインで定義されていない例を次に示します。

どちらでも構いませんが、こちらの方が分かりやすいと思います。

class Person {
   int id;  
   public getId(){
       return this.id;
   }  
}

class PersonComparator implements Comparator<Person> {
    @Override
    public int compareTo(Person personOne, Person personTwo) {
        reuturn personOne.getId() - personTwo.getId();
    }
}

使用法:

Person[] personArray = buildArraySomehow();
PersonComparator pc = new PersonComparator();
Arrays.sort(personArray, pc);

Comparator は、compareTo という 1 つのメソッドのみを持つインターフェイスです。

Comparator を作成する場合、これが実装する必要がある唯一のメソッドです。

PersonComparator.compareTo()は、2 つの Person オブジェクトの ID の差を返すだけであることに注意してください。

これは、compareTo()メソッドがどのように機能するかが原因です。

  • 最初の項目が 2 番目の項目より "" の場合、負の数が返されます。
  • 最初の項目が 2 番目の項目の "後に来る" 場合、正の数が返されます。
  • 2 つの項目が (順序に関して) 同等である場合、0 が返されます。

詳細については、 Comparatorのドキュメントを参照してください...

于 2013-02-13T21:31:59.577 に答える