[英]Best way to sort 2 array lists?
我有2個數組列表。 一個是包含生日的數組列表。 另一個是名稱的數組列表。
我正在使用日期按日期降序對日期的數組列表進行排序
Collections.sort(birthdayList);
我想讓名字的數組列表按照與生日列表相同的順序排序。
即
未分類
bdaylist namelist
1/20/1980 - Bob
3/15/1970 - Todd
8/25/1990 - Jeff
變成
已排序
3/15/1970 - Todd
1/20/1980 - Bob
8/25/1990 - Jeff
用Java做到這一點的最有效方法是什么?
非常感謝你!
創建一個這樣的類:
public class Person implements Comparable<Person> {
private String name;
private Date date;
public Person(String name, Date date) {
this.name = name;
this.date = date;
}
public String getName() {
return name;
}
public Date getDate() {
return date;
}
@Override
public int compareTo(Person o) {
return this.date.compareTo(o.getDate());
}
}
然后,您可以像這樣對Person
對象的列表進行排序:
public static void main(String... args) {
LinkedList<Person> persons = new LinkedList<Person>();
persons.add(new Person("Name1", new Date())); //Specify different dates
persons.add(new Person("Name2", new Date()));
persons.add(new Person("Name3", new Date()));
Collections.sort(persons);
//Collections.sort(persons, Collections.reverseOrder()); //Reverse order
}
而已。
或者另一種替代方法是使用Comparator
:
Collections.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getDate().compareTo(o2.getDate());
}
});
相反的順序:
Collections.sort(persons, Collections.reverseOrder(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getDate().compareTo(o2.getDate());
}
}));
然后,您無需在您的人員類中實現Comparable<Person>
。
不要對兩個數組列表進行排序; 對一個數組列表進行排序,該列表填充了包含日期和名稱的組合對象。 那真的是唯一的方法。
關於實現Comparable
並將其用作比較器的其他答案都是正確的。 但是,如果這也有幫助...
根據Javadoc for Collections.sort的說明,sort()使用Modified Mergesort作為排序算法。 如果我錯了,請糾正我,但是在所有排序算法中,Merge Sort可以在最壞的情況下實現最佳運行時間,這一點已廣為接受:O(n log n)(我並沒有消除以下事實:在最壞的情況下,可能還有其他排序算法也可以達到O(n log n)。
但是,O(n log n)僅是無限制值域的最佳可能運行時間。 如果您的域受限制,那么使用Bucket Sort可以獲得更好的O(n)運行時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.