学习检查给定数组是否已排序以定义排序顺序,即升序、降序或自定义顺序。
如果根据数组的排序顺序,数组中的每一项都大于或小于其前一项,则认为数组已排序。
要找到这样的项目对,我们必须遍历数组中的所有项目并将其与下一个项目进行比较,如果它违反了排序顺序,则我们断定数组未排序。否则,如果没有这样的项目对,则对数组进行排序。
请注意,可以通过以下方式确定数组的排序顺序:
要检查原始数组的排序,我们必须检查循环中数组项的顺序。这需要按升序或降序完成。
int[] array = { 1, 2, 3, 4, 5 };
boolean isSorted = checkIsSortedPrimitiveArrayWithStream(array);
System.out.println(isSorted); //true
public static boolean checkIsSortedPrimitiveArrayWithStream(
final int[] array) {
if (array == null || array.length <= 1) {
return true;
}
return IntStream.range(0, array.length - 1)
.noneMatch(i -> array[i] > array[i + 1]);
}
如果存储在数组中的对象实现了 Comparable 接口,那么我们可以使用 compareTo() 方法来检查对象是否相等,同时比较对象项的自然顺序。
Integer[] array = { 1, 2, 3, 4, 5 };
isSorted = checkIsSortedObjectArrayWithStream(ArrayUtils.toObject(array));
System.out.println(isSorted); //true
public static <T extends Comparable<? super T>>
boolean checkIsSortedObjectArrayWithStream(final T[] array) {
if (array.length <= 1) {
return true;
}
return IntStream.range(0, array.length - 1)
.noneMatch(i -> array[i].compareTo(array[i + 1]) > 0);
}
如果数组项没有实现 Comparable 接口,那么为了检查排序后的数组,我们可以使用 Comparator 实例。
User[] users = getSortedArray();
Comparator<User> firstNameSorter = Comparator.comparing(User::firstName);
isSorted = checkIsSortedObjectArrayForCustomSort(users, firstNameSorter);
System.out.println(isSorted); //true
public static <T> boolean checkIsSortedObjectArrayForCustomSort(
final T[] array, final Comparator<T> comparator) {
if (comparator == null) {
throw new IllegalArgumentException("Comparator should not be null.");
}
if (array.length <= 1) {
return true;
}
return IntStream.range(0, array.length - 1)
.noneMatch(i -> comparator.compare(array[i], array[i + 1]) > 0);
}
以上所有方法主要是为了让大家了解排序后的数组是如何检查的。 apache common 的 org.apache.commons.lang3.ArrayUtils
类包含一个方法 isSorted()
可以在一行中完成上述所有比较。
User[] users = getSortedArray();
isSorted = ArrayUtils.isSorted(array); //Natural order
System.out.println(isSorted); //true
isSorted = ArrayUtils.isSorted(array,
Comparator.comparing(User::firstName)); //Custom order
System.out.println(isSorted); //true
在本 Java 教程中,我们学习了检查给定数组是否已排序。我们学会了确定基元数组、Comparable 对象数组和未实现 Comparable 对象数组的排序性质。
无论我们选择哪种技术,逻辑都是一样的。因此,建议使用 Apache Commons 中的 ArrayUtils
类,以避免重写这个简单的逻辑。
快乐学习!!
标签2: Java Array地址:https://www.cundage.com/article/check-sorted-array.html