0

大家好,我被要求写以下作业方法,我需要澄清一下。基本上我想知道作为参数给出的 Comparable 项是否是 compareList 数组的一部分。假设数组已排序,我被告知如果可比较列表中有项目或项目小于数组的以下项目,则停止检查数组。我使用了 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;
}
4

2 回答 2

6

break打破任何循环,包括增强的循环。您的解决方案将起作用。

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

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

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

于 2013-07-17T20:06:33.057 回答
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;
}
于 2013-07-17T20:06:45.703 回答