簡體   English   中英

排序2個數組列表的最佳方法?

[英]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做到這一點的最有效方法是什么?

非常感謝你!

  • 創建一個具有2個字段的Person類:名稱和生日。
  • 將人員放在列表中
  • 使用比較生日的自定義比較器排序

創建一個這樣的類:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM