【发布时间】:2020-12-18 17:51:14
【问题描述】:
我的代码中有一个小错误,希望您能帮助我!
我有一个 ArrayList,我想删除所有重复超过 'N' 次的元素。我的解决方案在大多数情况下都可以正常工作,但是当涉及到 N=1 并且 ArrayList 大小超过 30 左右时,它会跳过一个元素,因此它不是唯一的。它的索引是随机的(我的意思是我试图找到一个隐藏问题的特殊索引,但我找不到)。
代码来了
while(isSorted!=true) {
for (int i = 0; i < test.size(); i++) {
counter = 0;
temp = test.get(i);
for (int j = i + 1; j < test.size(); j++) {
if (temp == test.get(j)) {
counter++;
if (counter >= maxOccurrences) {
test.remove(j);
}
}
}
if(counter<maxOccurrences){
isSorted=true;
}
}
}
如果我再次重复这段代码,它会删除这个元素,一切都很好。我试图理解为什么它会跳过一个不唯一的元素。我可以将 HashSet 用于这种特殊情况(当 N=1 时),但感觉有点作弊。 我希望我的问题很清楚,并提供了所有需要的信息。 先感谢您。和平与爱!
【问题讨论】:
-
您能否提供您观察到奇怪行为的数据的示例输入?
-
来了! ArrayList 是:{58, 14, 9, 1, 31, 36, 54, 41, 13, 14, 1, 20, 26, 35, 10, 25, 31, 63, 62, 32, 30, 40, 71, 31, 38, 44, 31, 29, 8, 34, 14, 43, 54, 76, 62, 58, 60, 33, 12, 54, 4, 38, 6, 40, 8, 68, 39, 41, 57, 58, 13, 46, 37, 70, 23, 75, 13, 17, 28, 44, 44, 67, 3, 19, 0, 15, 24, 55, 49, 51, 44, 2, 51, 19, 40, 1, 76};结果是: [58, 14, 9, 1, 31, 36, 54, 41, 13, 20, 26, 35, 10, 25, 63, 62, 32, 30, 40, 71, 38, ?? ??????, 29, 8, 34, 43, 76, 60, 33, 12, 4, 6, 68, 39, 57, 46, 37, 70, 23, 75, 17, 28, ??? ?????, 67, 3, 19, 0, 15, 24, 55, 49, 51, 2] 如您所见,44 还剩 2 次!
标签: java loops sorting arraylist