当我清除该集合时,它正在清除其他集合的内容以及为什么?

时间:2016-09-21 09:40:08

标签: java

我有一个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中的数据?请建议我。谢谢

2 个答案:

答案 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())