在 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;
我有一个像这样的时间数组 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;