[英]sorting array of type object using Arrays.sort() method
我知道如何使用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<Person>(){
@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<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);
这是没有内联定义比较器的示例。
两种方法都可以接受,但是我认为这种方法更容易理解。
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的文档以获取更多信息...
对于复杂的对象,Java不知道如何比较它们。 因此,您需要编写一个比较器。 通常,您选择必须比较的班级成员。
public class Comp implements Comparator<Test> {
@Override
public int compare(Test t, Test t1) {
return what_you_want_to_compare;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.