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

时间:2015-02-21 12:10:56

标签: java arrays sorting date

我有一个像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;

            }
        }
    }

然而,此方法抛出空指针异常!

3 个答案:

答案 0 :(得分:1)

Java Date 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;

答案 1 :(得分:0)

由于提供的NullPointerException可能大于实际的数组长度,因此可能会抛出len。您可以使用Date获取.length数组的长度。

public static void sortArrival(Date[] arrival) throws NullPointerException {
  int len = arrival.length;

答案 2 :(得分:0)

稍微清洁的方法如下。

创建新的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用来比较每个单独元素,同时对数组进行排序。