我有一个像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;
}
}
}
然而,此方法抛出空指针异常!
答案 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用来比较每个单独元素,同时对数组进行排序。