校验Java中的数组是否有序

1. 概述

在本篇文章中,我们会学习用不同的方式来检查Java数组中的元素是否有序。

在开始学习之前,你需要了解一下在Java中如何对数组排序

2.使用循环

使用for循环可以来检查Java数组中的元素是否有序。我们可以通过迭代比较数组中的所有元素,两两比较

2.1 基本数据类型的数组

我们会通过索引迭代数组元素中的所有元素,将第一个和第二个比较,第二个和第三个比较,以此类推,直到最后一个元素比较终结。

如果有其中一组比较返回false,则数组不是有序的;否则,数组就是有序的。

boolean isSorted(int[] array) {
    for (int i = 0; i < array.length - 1; i++) {
        if (array[i] > array[i + 1])
            return false;
    }
    return true;
}
2.2 引用类型的数组实现了Comparable接口

我们可以使用实现Comparable的对象做类似的事情。
我们将使用compareTo方法而不是使用大于号的符号做比较:

boolean isSorted(Comparable[] array) {
    for (int i = 0; i < array.length - 1; ++i) {
        if (array[i].compareTo(array[i + 1]) > 0)
            return false;
    }
    return true;
}
2.3 引用类型的数组实现了Comparable接口

如果一个引用类型没有实现Comparable接口,那么我们就需要创建一个Comparator

在这个例子中,我们会使用Employee对象,是一个简单的POJO对象,存在三个属性。

public class Employee implements Serializable {
    private int id;
    private String name;
    private int age;
 
    // getters and setters
}

接着,我们需要选择按照哪个属性进行排序。假设我们按照age进行排序:

Comparator<Employee> byAge = Comparator.comparingInt(Employee::getAge);

然后,我们可以改变我们的方法也采用Comparator

boolean isSorted(Object[] array, Comparator comparator) {
    for (int i = 0; i < array.length - 1; ++i) {
        if (comparator.compare(array[i], (array[i + 1])) > 0)
            return false;
    }
 
    return true;
}

3. 递归

当然,我们可以使用递归来代替循环。这里的想法是我们将检查数组中的两个位置然后递归,直到我们检查每个位置。

3.1 基本数据类型数组

在这种方法中,我们检查最后两个位置的元素。
如果它们已经排序,我们将再次调用该方法
,但具有先前的位置。
如果其中一个位置未排序,则该方法将返回false

boolean isSorted(int[] array, int length) {
    if (array == null || length < 2) 
        return true; 
    if (array[length - 2] > array[length - 1])
        return false;
    return isSorted(array, length - 1);
}
3.2 引用类型实现了Comparator接口

现在,让我们再看一下实现Comparable的对象。
我们将看到compareTo采用相同的方法:

boolean isSorted(Comparable[] array, int length) {
    if (array == null || length < 2) 
        return true; 
    if (array[length - 2].compareTo(array[length - 1]) > 0)
        return false;
    return isSorted(array, length - 1);
}
3.3 引用类型没有实现Comparator接口
boolean isSorted(Object[] array, Comparator comparator, int length) {
    if (array == null || length < 2)
        return true;
    if (comparator.compare(array[length - 2], array[length - 1]) > 0)
        return false;
    return isSorted(array, comparator, length - 1);
}

4. 结论

在本教程中,我们已经了解了如何检查数组是否已排序。
我们看到了迭代和递归解决方案。

我们的建议是使用循环解决方案。
它更干净,更容易阅读。

像往常一样,本教程的源代码可以在GitHub上找到。

原文地址:https://www.baeldung.com/java-check-sorted-array

作者:Eugen

译者:lee
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值