大家好,我被要求写下以下的家庭作业方法,我需要澄清一下。基本上我想知道作为参数给出的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;
}
答案 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;
}