排序2个数组列表的最佳方法?

我有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类:name和birthday。
  • 把这些人列入名单
  • 使用比较生日的自定义比较器排序

创建一个这样的类:

 public class Person implements Comparable { 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 persons = new LinkedList(); 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() { @Override public int compare(Person o1, Person o2) { return o1.getDate().compareTo(o2.getDate()); } }); 

相反的顺序:

 Collections.sort(persons, Collections.reverseOrder(new Comparator() { @Override public int compare(Person o1, Person o2) { return o1.getDate().compareTo(o2.getDate()); } })); 

然后,您不需要在person类中实现Comparable

不要排序两个数组列表; 排序一个数组列表,其中包含包含日期和名称的组合对象。 这真的是唯一的方法。

关于实现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)运行时间