2013-02-13 64 views
2

我知道如何使用Arrays.sort()方法按以下方式排序對象數組。使用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);  

但我不知道以下兩種方法。

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

可有人請讓我知道如何使用這些methods.I要求你添加代碼或指示任何鏈接的.java class.I試圖尋找它來排序的對象類型數組,但無法找到它。

謝謝。

+1

看看該文檔[比較](http://docs.oracle.com/javase/7/docs/api/java /util/Comparator.html)。你需要實現一個比較器來使用你所問的方法。 – jahroy 2013-02-13 21:28:29

+1

它應該總是很容易找到給定的java類的文檔。所有你需要做的是谷歌的Java 7類名稱。在這種情況下,google:'java 7 Comparator'。如果您正在查看'Arrays'類的[documentation](http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html),則有多個指向「比較器」的文檔。 – jahroy 2013-02-13 21:41:00

回答

3

實施例:

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(); 
    } 
}); 
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); 

比較器是一個只有一個方法的接口:的compareTo。

當您創建比較器時,這是您需要實現的唯一方法。

請注意,PersonComparator.compareTo()什麼都不做,只是返回兩個Person對象的ID的區別。

這是因爲的compareTo()方法是如何工作的:

  • 如果第一項「到來之前」第二項,應返回一個負數。
  • 如果第一項「」在之後「第二項,則應該保留一個正數。
  • 如果兩個項目是等價的(根據排序),應該返回零。

檢查出Comparator更多信息的文檔...

0

對於複雜對象的Java不知道如何將它們進行比較。因此你需要編寫一個比較器。通常你選擇一個需要比較的成員。

public class Comp implements Comparator<Test> { 

    @Override 
    public int compare(Test t, Test t1) { 
     return what_you_want_to_compare; 
    }  
} 
1

它很容易:

比較接口讓您對您排列對象的方式控制。

一個對象可以基於一個關鍵,這是你的智慧。

例如,客戶對象應根據賬戶號碼

class Account { 
    String AccountNumber; //Key 1 
    String AccountName; //Key 2 
    String GovtID;  //Key 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);