使用 break 退出增强的 for 循环

jor*_*con -1 java foreach for-loop break

大家好,我被要求编写以下作业方法,我需要澄清一下。基本上我想知道作为参数给出的 Comparable 项目是否是可比较列表数组的一部分。假设数组已排序,我被告知如果可比较列表中有项目或者项目小于数组的下一个项目,我就停止检查数组。我使用了 break 但我不确定 break 是否会让我退出增强的 for 循环,以避免在任何条件为真时检查整个数组。我想确保数组中有 50,000 个项目并且我在位置 5 找到该项目以停止检查数组的其余部分。我以前从未使用过 break,所以我不确定它是否能让我摆脱 for 循环。

public boolean contains(Comparable item) {

    Comparable[] comparableList= getStore();
    boolean isThere = false;
    for(Comparable p : comparableList)
    {
        if(item.compareTo(p)==0)
        {
            isThere = true;
            break;
        }
        if(item.compareTo(p)<0)
        {

            break;
        }

    }
    return isThere;
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

break将打破任何环路,包括增强的一个出来。您的解决方案将起作用。

但是,由于您在找到项目后立即返回,因此您可以将循环更改为在找到项目后立即返回,或者在您知道不会找到它时立即返回:

Comparable[] comparableList= getStore();
for(Comparable p : comparableList) {
    if(item.compareTo(p)==0) {
        return true;
    }
    if(item.compareTo(p)<0) {
        return false;
    }
}
return false;
Run Code Online (Sandbox Code Playgroud)

此外,由于数组已排序,线性搜索不是您的最佳策略:实施二分搜索可以使您的算法显着更快。