gpt4 book ai didi

java - 在 java 中比较两个 ArrayLists 时出错

转载 作者:行者123 更新时间:2023-11-29 07:10:10 24 4
gpt4 key购买 nike

我正在尝试编写一个方法,该方法接受 2 个 double ArrayList 并返回 set1 中 set2 中找不到的所有值。这些数字应该在 set3 中返回。我不断收到内存不足错误。谁能指出我正确的方向?

ArrayList<Double> setDiff(ArrayList<Double> set1, ArrayList<Double> set2){
ArrayList<Double> set3 = new ArrayList<Double>();
int count = 0;
while(count < set1.size()){
boolean inList = false;
while(inList == false){
int count2 = 0;
while(count2 < set2.size() && set1.get(count) == set2.get(count2)){
count2++;
}
if(count2 != set2.size()){
set3.add(set1.get(count));
}
else{
inList = true;
count++;
}
}
}

return set3;
}

最佳答案

某些循环可能不会像您预期的那样停止。

以下代码片段将完成与您尝试做的几乎相同的事情。

for (Double d : set1) {
if (!set2.contains(d)) {
set3.add(d);
}
}

更新:既然你说你不能使用 contains(),你可以自己执行检查:

for (Double d : set1) {
boolean found = false;
for (int i=0; i<set2.size() && !found; i++) {
if (d.equals(set2.get(i))) {
found = true;
}
}
if (!found) {
set3.add(d);
}
}

编辑:此外,您代码中的问题在于行

  if(count2 != set2.size()){

应该把!=改成>,因为在count2小于set2的情况下,外部count变量不会增加,导致死循环,几秒后,OutOfMemoryError。

此外,您的算法也不是 100% 正确的,因为遍历第二个列表的循环不一致。您可以在下面的 while 循环中看到类似的方法:

                int count = 0;
while (count < set1.size()) {
boolean inList = false;
int count2 = 0;
while (inList == false && count2 < set2.size()) {
if (set1.get(count).equals(set2.get(count2))) {
inList = true;
}
count2++;
}
if (!inList) {
set3.add(set1.get(count));
}
count++;
}

关于java - 在 java 中比较两个 ArrayLists 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com