我有一個多維數組,其名稱爲banksNumberOfOrders
,它用一些整數值初始化。java將子列表添加到for循環中的嵌套哈希映射中
我已經建立了嵌套的hashmap,它有兩個整數鍵,它們也是行和列索引banksNumberOfOrders
並且有一個列表。
我通過嵌套for循環將隨機值banksNumberOfOrders[i][j]
添加到列表中。此外,我還通過相同的嵌套for循環將此列表的子列表添加到嵌套的哈希映射中。
我編寫的代碼是諸如
Map<Integer, Map<Integer,List<Integer>>> paymentOrderAmounts = new HashMap<Integer, Map<Integer,List<Integer>>>();
List<Integer> amounts = new ArrayList<Integer>();
int count_begin = 0; //list size
for (int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(i != j){
for(int a=0; a<banksNumberOfOrders[i][j]; a++){
int amount = ThreadLocalRandom.current().nextInt(begin1, end1);
amounts.add(amount);
}
int count_end = count_begin+banksNumberOfOrders[i][j];
paymentOrderAmounts.put(i, new HashMap<Integer,List<Integer>>());
paymentOrderAmounts.get(i).put(j, amounts.subList(count_begin, count_end));
count_begin = count_end;
System.out.println(i+" --> "+j+" "+paymentOrderAmounts.get(i).get(j)+" ");
}
}
System.out.println();
}
該代碼而不會出現錯誤和打印值進行清理。 但是當我嘗試打印嵌套hashmap的值時,由於子集列表的使用情況,我正在給出併發修改異常。 二碼片如
//traverse hashmap and print values
for(Map.Entry<Integer, Map<Integer,List<Integer>>> t:paymentOrderAmounts.entrySet()) {
Integer key = t.getKey();
for (Entry<Integer, List<Integer>> e : t.getValue().entrySet())
System.out.println(key + "-->" + e.getKey()+" "+e.getValue());
}
根據我的谷歌搜索,我看到了,我必須使用迭代器添加的元素插入列表甩開錯誤導致的錯誤,否則會出現錯誤。 但我不明白,我已經使用循環,我怎麼能在這個嵌套循環中使用迭代器?
你可以發佈拋出ConcurrentModificationException和完整堆棧跟蹤的代碼嗎? – 2016-12-03 17:27:26
我可能會建議你使用某種表格(行,列,值),請參閱番石榴表格,例如:https://github.com/google/guava/wiki/NewCollectionTypesExplained#table – 2016-12-03 17:28:48
對於我的理解,此表格格式(行,列,值),但我需要(行,列,值)的結構 –