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

有人可以让我知道如何使用这些方法对类型对象的数组进行排序。我请求您添加代码或任何指向.java类的链接。我试图搜索它但找不到它。

谢谢。

例:

 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(){ @Override public int compare(Person p1, Person p2){ return p1.getId() - p2.getId(); } } ); 

这很简单:

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

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

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

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

您可以对三个键中的任何一个进行排序。

为了控制排序,您必须定义一个实现Comparator接口的类,该接口将定义用于排序的逻辑。

 class SortAccountByNumber implements Comparator { //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); 

对于复杂对象,Java不知道如何比较它们。 因此,您需要编写一个比较器。 通常,您选择必须比较的类的成员。

 public class Comp implements Comparator { @Override public int compare(Test t, Test t1) { return what_you_want_to_compare; } } 

这是一个没有内联定义比较器的例子。

无论哪种方式都可以接受,但我认为这种方式更容易理解。

 class Person { int id; public getId(){ return this.id; } } class PersonComparator implements Comparator { @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。

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

请注意, PersonComparator.compareTo()不执行任何操作,只返回两个Person对象的ID的差异。

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

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

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