为了账号安全,请及时绑定邮箱和手机立即绑定

Java数组,查找重复项

Java数组,查找重复项

回首忆惘然 2019-07-05 14:28:43
Java数组,查找重复项我有一个数组,正在寻找副本。duplicates = false;for(j = 0; j < zipcodeList.length; j++){     for(k = 0; k < zipcodeList.length; k++){         if (zipcodeList[k] == zipcodeList[j]){             duplicates = true;         }     }}但是,当没有副本时,此代码不能工作。为什么这么说?
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

让我们看看您的算法是如何工作的:


an array of unique values:


[1, 2, 3]


check 1 == 1. yes, there is duplicate, assigning duplicate to true.

check 1 == 2. no, doing nothing.

check 1 == 3. no, doing nothing.

check 2 == 1. no, doing nothing.

check 2 == 2. yes, there is duplicate, assigning duplicate to true.

check 2 == 3. no, doing nothing.

check 3 == 1. no, doing nothing.

check 3 == 2. no, doing nothing.

check 3 == 3. yes, there is duplicate, assigning duplicate to true.

更好的算法:


for (j=0;j<zipcodeList.length;j++) {

    for (k=j+1;k<zipcodeList.length;k++) {

        if (zipcodeList[k]==zipcodeList[j]){ // or use .equals()

            return true;

        }

    }

}

return false;


查看完整回答
反对 回复 2019-07-05
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您可以使用位图来提高大数组的性能。

    java.util.Arrays.fill(bitmap, false);

    for (int item : zipcodeList)
        if (!bitmap[item]) bitmap[item] = true;
        else break;

更新:这是我在过去的一个非常疏忽的回答,把它保存在这里仅供参考。你应该参考Andersoj的优秀作品回答.


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 750 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信