【问题标题】:Print values of ArrayList<ArrayList<Integer>> that are not contained in another ArrayList<ArrayList<~>>打印不包含在另一个 ArrayList<ArrayList<~>> 中的 ArrayList<ArrayList<Integer>> 的值
【发布时间】:2021-01-20 17:20:49
【问题描述】:

我正在尝试遍历名为 listlist2 的两个 ArrayList&lt;ArrayList&lt;Integer&gt;&gt; 并在删除重复项的同时打印结果。

list 包含:

[[4], [3], [0,2,1]]

list2 包含:

[[2,3], [0], [1], [4], []]

我当前的代码如下:

//size=list.size();
Integer temp1;

for(int num=0;num<size;num++){
    System.out.print(list.get(num)+" ");
    temp1=list.get(num).get(0);
    System.out.println(list2.get(temp1));
}

对于列表位置 0 中的每个值,我想检查 list2 中的位置并打印内容而不打印列表中可能存在的值。 例如,目前我的输出如下所示,对于第三行,我希望能够仅打印 [2,3] 中的 3,因为值 2 在 [0,2,1] 中。

[4] []
[3] [4]
[0, 2, 1] [2,3]

我不确定如何有效地删除重复值并仅打印唯一值。

【问题讨论】:

  • 请发布一个可重现的最小示例,listlist2 是什么

标签: java list arraylist iterator contains


【解决方案1】:

首先,您将来自list 的子列表保存在时态数组中,然后将其打印出来:

ArrayList<Integer> temp;
temp = list.get(num);
System.out.print(list.get(num)+" ");

获取temp1 并从list2 获取子列表,以便能够比较和删除重复项:

temp1=list.get(num).get(0);
ArrayList<Integer> list2sub = list2.get(temp1);

遍历temp 列表并从list2sub 中删除所有重复项并打印list2sub 输出:

for (Integer element : temp) {
    list2sub.remove(element);
}
System.out.println(list2sub);

最后应该是这样的:

int size=list.size();
Integer temp1;
for(int num=0;num<size;num++){
    ArrayList<Integer> temp;
    temp = list.get(num);
    System.out.print(list.get(num)+" ");
    temp1=list.get(num).get(0);
    ArrayList<Integer> list2sub = list2.get(temp1);
    for (Integer element : temp) {
        list2sub.remove(element);
    }
    System.out.println(list2sub);
}

输出是这样的:

[4] []
[3] [4]
[0, 2, 1] [3]

如果您不允许更改子列表中的值,即执行.remove,那么您只需将其放在另一个temp 数组列表中并打印出来,而不是修改list2sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多