java - 在 Java 中比较两个 ArrayList

标签 java loops methods arraylist compare

我正在尝试编写一个方法,该方法接受 2 个 double 的 ArrayList,并返回 set1 中在 set2 中找不到的所有值。这些数字应在 set3 中返回。通常我只会使用 set.contains,但我只能使用 set.get、set.size 和 set.add。谁能指出我正确的方向?

例如:

如果set1有数字1,2,3,4,5

set2 的值为数字 1,7,9,5,3

set3 只能包含 2,4,5

ArrayList<Double> setDiff(ArrayList<Double> set1, ArrayList<Double> set2){
    ArrayList<Double> set3 = new ArrayList<Double>();
    for(int i = 0; i < set1.size(); i++){
        for(int x = 0; x < set2.size(); x++){
            if(set1.get(i) != set2.get(x)){
                set3.add(set1.get(i));
            }
        }
    }
    return set3;
}

最佳答案

问题是,您正在根据第一次失败将数字添加到 set3 中。因此,如果 set2 的第一个元素与 set1 的当前元素不匹配,则将其添加到 set3 中。

考虑到你的工具包中的限制,我怀疑这是你的作业。因此,我只会告诉您如何处理。

您可以使用 boolean 变量,并在发现后立即切换它(例如将其设置为 false) set2 中的当前元素,然后跳出内循环

因此,内循环中的条件将从: -

if(set1.get(i) != set2.get(x))

至:-

if(set1.get(i) == set2.get(x)) {
    // The current element in set1 is present in set2. 
    // toggle the boolean variable
    // break out of loop. As you no more want to check for further elements.
}

然后在内部循环之外,检查该boolean变量的状态。并且根据状态,您可以将当前项目添加或不添加到set3。例如如果 boolean 变量为 false,则表示您在 set2 中找到了该元素,因此不要将其添加到 set3 中,否则添加它。

您还需要在每次外循环开始时重置 boolean 变量。

关于java - 在 Java 中比较两个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621445/

相关文章:

java - JPA LOJ(左外连接): Cannot join to attribute of basic type

java - 无法访问的代码 - 在 switch 语句中返回后放置一个中断

python - 在列表列表中查找最大出现次数

ruby - 从回溯中获取接收者信息

java - 如何读取和下载存储在Bucket中的文件?

java - Java 中的 Math.round() 方法

java - 更新半连续变量的下限不再使其保持半连续

java - 如何为 Android 中所有单选按钮组中的所有单选按钮设置背景

java - 如何在java中创建一个循环,在每行上打印略有不同的字符串?

Javascript如何用不固定的迭代时间构建循环