我有一个ArrayList al Array的ArrayList数组,我有一个普通的ArrayList al_1。我在代码中的某个时刻清除al_1,但在清除之前我使用al.put(al_1)将al_1放入al。但是当我清除al_1时,即使al al is is is clear。可能是什么原因或我的方法是错的?
ArrayList<String> previousAction = new ArrayList<String>();
ArrayList<Double> arrayServerTimeInSecond = new ArrayList<Double>();
ArrayList<String> uniqueActions = new ArrayList<String>();
ArrayList<ArrayList<Double>> al = new ArrayList<ArrayList<Double>>();
while (itr.hasNext()) {
// create a row
String[] data = itr.next().toString().split(",");
row = sheet.createRow((short) rowCount++);
// write data into cells
for (int j = 0; j < data.length; j++) {
if (notHeader == true) {
if (j == 3) {
previousAction.add(data[j]);
actionCount++;
}
if (j == 16) {
if (previousAction.size() == 1) {
arrayServerTimeInSecond.add(Double.valueOf(data[j]));
uniqueActions.add(data[3]);
} else if (previousAction.size() > 1) {
if (previousAction.get(actionCount - 2).equals(data[3])) {
arrayServerTimeInSecond.add(Double.valueOf(data[j]));
} else {
al.add(uniqueActions.size()-1, arrayServerTimeInSecond);
arrayServerTimeInSecond.removeAll(arrayServerTimeInSecond);
arrayServerTimeInSecond.add(Double.valueOf(data[j]));
uniqueActions.add(data[3]);
}
}
}
}
cell = row.createCell((short) cellCount++);
cell.setCellValue(data[j]);
}
cellCount = 0;
notHeader = true;
}
和第3行当我向al_1添加一个值时,它甚至会反映在al,它将包含al_1中的数据?请建议我。谢谢
答案 0 :(得分:3)
al.add(i++, al_1)
在al_1
中提及对al
的引用。
如果您稍后清除al_1
,则包含该引用的al
成员将包含一个空列表。
为了将原始List
的{{1}}添加到al_1
,您应该使用:
al
或
al.add(new ArrayList(al_1));
这会将al.add(someIndex,new ArrayList(al_1));
的副本添加到al_1
,因此稍后更改al
不会影响al_1
。
答案 1 :(得分:1)
克隆arrayList的最简单方法:
al.add(i++, al_1.clone())