@Sanj 给出的已接受答案有一些问题:(A) 它不处理列表中的空值,(B) 它不必要地专门用于 ArrayList<Integer>,而它很容易只是 @ 987654322@,以及 (C) 方法名称具有误导性。
注意:对于 (A),获得 NPE 很可能是合适的 - OP 没有说。对于演示代码,我假设空值是可忽略的。其他解释也很公平,例如null 始终是“最小”值(需要不同的编码,LAAEFTR)。无论如何,行为应该是 JavaDoc 的——我在我的演示中没有这样做 #8>P
注意:对于 (B),保留专用版本可能会提高运行时性能,因为该方法“知道”支持数据在数组中,并且编译器可能在使用 Iterable 的版本上提取一些运行时效率,但这样的说法对我来说似乎是可疑的,无论如何,我希望看到基准结果来支持这样的. ALSO 甚至我演示的版本也可以使用通用元素类型进一步抽象(而不是仅限于Integer)。这样的方法可能有如下定义:
public static <T extends Comparable<T>> boolean isAscendingOrder(final Iterable<T> sequence)
注意:对于 (C),我遵循 @Valentine 的方法命名建议(几乎)。我非常喜欢这个想法,我更进一步明确地指出了检查排序的方向性。
下面是一个演示类,它显示了 isAscendingOrder 的良好行为,它解决了所有这些问题,然后是 @Sanj 的解决方案的类似行为(直到 NPE)。当我运行它时,我得到控制台输出:
true, true, true, true, false, true
------------------------------------
true, true, true, true, false,
Exception in thread "main" java.lang.NullPointerException
at SortCheck.sortArrayList(SortCheck.java:35)
at SortCheck.main(SortCheck.java:78)
.
import java.util.ArrayList;
public class SortCheck
{
public static boolean isAscendingOrder(final Iterable<Integer> sequence)
{
Integer prev = null;
for (final Integer scan : sequence)
{
if (prev == null)
{
prev = scan;
}
else
{
if (scan != null)
{
if (prev.compareTo(scan) > 0)
{
return false;
}
prev = scan;
}
}
}
return true;
}
public static boolean sortArrayList(final ArrayList<Integer> data)
{
for (int i = 1; i < data.size(); i++)
{
if (data.get(i - 1) > data.get(i))
{
return false;
}
}
return true;
}
private static ArrayList<Integer> createArrayList(final Integer... vals)
{
final ArrayList<Integer> rval = new ArrayList<>();
for(final Integer x : vals)
{
rval.add(x);
}
return rval;
}
public static void main(final String[] args)
{
final ArrayList<Integer> listEmpty = createArrayList();
final ArrayList<Integer> listSingleton = createArrayList(2);
final ArrayList<Integer> listAscending = createArrayList(2, 5, 8, 10 );
final ArrayList<Integer> listPlatuea = createArrayList(2, 5, 5, 10 );
final ArrayList<Integer> listMixedUp = createArrayList(2, 5, 3, 10 );
final ArrayList<Integer> listWithNull = createArrayList(2, 5, 8, null);
System.out.print(isAscendingOrder(listEmpty ) + ", ");
System.out.print(isAscendingOrder(listSingleton) + ", ");
System.out.print(isAscendingOrder(listAscending) + ", ");
System.out.print(isAscendingOrder(listPlatuea ) + ", ");
System.out.print(isAscendingOrder(listMixedUp ) + ", ");
System.out.print(isAscendingOrder(listWithNull ) + "\n");
System.out.println("------------------------------------");
System.out.print(sortArrayList(listEmpty ) + ", ");
System.out.print(sortArrayList(listSingleton) + ", ");
System.out.print(sortArrayList(listAscending) + ", ");
System.out.print(sortArrayList(listPlatuea ) + ", ");
System.out.print(sortArrayList(listMixedUp ) + ", ");
System.out.print(sortArrayList(listWithNull ) + "\n");
}
}