ArrayList 的 ArrayList 移除集合

ArrayList of ArrayList remove collection

我有 ArrayList L [[1,2,3,4,5], [1,2,3,4,5]] 的 ArrayList 和一个简单的 ArrayList a [3,4] 我必须从 L 的第二个元素中删除 [3,4] 以获得 [[1,2,3,4,5],[1,2,5]]

  public static void main(String[] args) {


    ArrayList< ArrayList<Integer> > L = new ArrayList< ArrayList<Integer> >();
    ArrayList<Integer> l1 = new ArrayList<Integer>();
    l1.add(1);
    l1.add(2);
    l1.add(3);
    l1.add(4);
    l1.add(5);

    L.add(l1);

    ArrayList<Integer> a = new ArrayList<Integer>();
    a.add(3);
    a.add(4);

    for(int i=1; i<2; i++)
    {
        L.add(L.get(i-1));
        if(L.get(i).containsAll(a))
        {  //System.out.println("OK");
            L.get(i).removeAll(a);
        }

    }
    System.out.println(L);



}

尝试:

L.get(1).removeAll(a); // remove all elements of a from the second list of L

问题在于线路:

L.add(L.get(i-1));

这使得 L 中的第二个 List 与第一个 ArrayList<Integer> 的实例 完全相同。因此,当您从 L.get(1) 中删除 34 这两项时,您似乎已将这两项删除两次。这就是为什么你得到输出

[[1, 2, 5], [1, 2, 5]]

您真正想要的是 L 中的第二个 List 成为第一个的 copy。为此,创建一个新的 List 实例,如下所示:

 L.add(new ArrayList<Integer>(L.get(i-1)));