使用break来摆脱增强的for循环

时间:2013-07-17 20:02:27

标签: java for-loop foreach break

大家好,我被要求写下以下的家庭作业方法,我需要澄清一下。基本上我想知道作为参数给出的Comparable项是否是comparativeList数组的一部分。假设数组已排序,我被告知如果MatchedList中有项目或者item小于数组的下一项,则停止检查数组。我使用break但是我不确定break是否会让我退出增强的for循环以避免在任何条件为真的情况下检查整个数组。我想确保如果数组中有50,000个项目,我发现位置5处的项目停止检查数组的其余部分。我之前从未使用过休息,因此我不确定它是否会让我退出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;
}

2 个答案:

答案 0 :(得分:4)

break将突破任何循环,包括增强循环。您的解决方案将有效。

但是,由于您在找到商品后立即返回,因此您可以在找到商品后立即更改循环,或者只要您知道自己无法找到该商品,就可以立即返回:

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

此外,由于数组已排序,因此线性搜索不是您的最佳策略:实施Binary Search可以使您的算法速度更快。

答案 1 :(得分:0)

如果您想知道一旦发现停止的最佳方法,请执行以下操作:

public boolean contains(Comparable item) {

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

    }
    return false;
}