在 JAVA 中对 TIME 数组进行排序的最佳方法是什么

What is the best way to sort an array of TIME in JAVA

我有一个像这样的时间数组 Date[] arrival = new Date[n] 如何在不使用内置 Array.sort 方法的情况下按升序对它们进行排序。

public static void sortArrival(Date[] arrival,int len) throws NullPointerException
{
    for(int i=0;i<len-1;i++)
    {
        for(int j=0;j<len-1;j++)
        {
            if(arrival[j].before(arrival[j+1]))
            {
                System.out.println("sorting dates..");
                Date t = new Date();
                t = arrival[j];
                arrival[j] = arrival[j+1];
                arrival[j+1]=t;

            }
        }
    }

但是这个方法抛出一个空指针异常!

这可能会引发 NullPointerException,因为提供的 len 可能大于实际数组长度。您可以使用 .length.

获取 Date 数组的长度
public static void sortArrival(Date[] arrival) throws NullPointerException {
  int len = arrival.length;

一个更简洁的方法如下。

创建一个新的 Comparator<Date>,并使用 Arrays.sort(arrival, COMPARATOR_DATE);。通过使用比较器,您可以利用 Java 的内置数组排序功能。

您可以按如下方式创建 COMPARATOR_DATE 对象:

public static final Comparator<Date> COMPARATOR_DATE = new Comparator<Date>() {
     @Override public final int compareTo(final Date pDateA, final Date pDateB) {
          return pDateA.compareTo(pDateB);
     }
}; 

Java 在对数组排序时使用此对象来比较每个单独的元素。

Java 日期 Class 已经内置了一个 compareTo 函数。

http://docs.oracle.com/javase/7/docs/api/java/util/Date.html

如果您选择排序算法,您应该能够在算法中使用比较。

例如插入排序:

for (int i=1; i<arr.length; i++) {
    Date toInsert=arr[i];
    int j=i;
    while(j>0 && toInsert.compareTo(arr[j-1])<0) {
        arr[j]=arr[j-1];
        j--;
    }
    arr[j]=toInsert;