簡體   English   中英

修改ArrayList的ArrayList時並發修改異常

[英]Concurrent Modification Exception When Modifying ArrayList of ArrayList

問題

編寫一個接受唯一整數數組並返回其冪集的函數。 集合X的冪集P(X)是X的所有子集的集合。例如,[1,2]的冪集是[[],[1],[2],[1,2]]。 注意,powerset中的集合不需要按任何特定順序排列。

我的方法

我的方法很簡單,我將從一個名為master的ArrayList的ArrayList開始。 我將創建一個emptyList並將其添加到母版中。 然后,我將遍歷每個數字,並為每個數字創建一個新列表,就像已經在主數據庫中的所有列表一樣,但是將新數字附加到該列表中。 因此,如果我在主列表中有一個空列表,並且我的num為1,我將向主列表添加[1]。 然后,當我2歲時,我會將[2]和[1,2]添加到主列表中。

我的密碼

public static void main(String args[]) {

    ArrayList<Integer>  inputList = new ArrayList<>();
    inputList.add(1);
    inputList.add(2);
    inputList.add(3);

    System.out.println(powerset(inputList).size());

}

public static ArrayList<ArrayList<Integer>> powerset(ArrayList<Integer> array) {

    ArrayList<ArrayList<Integer>> master = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> emptyList = new ArrayList<>();
    master.add(emptyList);

    for(Integer num: array){
        for(ArrayList<Integer> list: master){
            ArrayList<Integer> toAppendList = list;
            toAppendList.add(num);
            master.add(toAppendList);
        }
    }
    return master;
}

問題

由於某種原因,我不斷

線程“主”中的異常java.util.ConcurrentModificationException

我不確定這是如何進行並發修改,以及如何刪除它。

您正在嘗試同時迭代和修改列表,這是不允許的。 而且算法不正確。 您可以在此處查看更好的實現, 獲得Java中集合的冪集 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM