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

但我不知道以下两种方法。

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

这很简单:

比较器界面使您可以控制对对象进行排序的方式。

对象可以基于您明智的键。

例如,Account 对象应根据 AccountNumber 进行排序

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);
于 2013-02-13T21:44:11.697 回答
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。

创建比较器时,这是您需要实现的唯一方法。

请注意,PersonComparator.compareTo()只返回两个 Person 对象的 ID 的差异。

这是因为compareTo()方法应该如何工作:

  • 如果第一项“”第二项之前,则应返回负数。
  • 如果第一项“”第二项之后,则应返回一个正数。
  • 如果这两个项目是等价的(就排序而言),则应返回零。

查看Comparator的文档以获取更多信息...

于 2013-02-13T21:31:59.577 回答
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 回答