2016-09-21 81 views
1

我有一個形式爲ArrayList al的ArrayList數組,我有一個正常的ArrayList al_1。我在代碼中的某處清除了al_1,但在清除之前,我使用al.put(al_1)將al_1放入了al。但是當我清除al_1時,即使al被清除。可能是什麼原因或我的方法是錯誤的?當我清除集合時,它會清除其他集合的內容以及爲什麼?

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; 
      } 

and at 3 line當我向al_1添加一個值時,它甚至會反映al,它將包含al_1中的數據?請建議我。謝謝

+0

請你能複製整個類或方法? –

+0

我懷疑你的變量al_1與al –

回答

3

al.add(i++, al_1)al中提及al_1。 如果您稍後清除al_1,則包含該引用的成員al將包含一個空List。

爲了一個List相同添加到原來的al_1al,你應該使用:

al.add(new ArrayList(al_1)); 

al.add(someIndex,new ArrayList(al_1)); 

這的al_1副本添加到al,所以後來改變al_1不會影響al

+0

具有相同的參考非常感謝你@Eran,輝煌的答案。 – Jefry

+0

這是一個很好的答案 –

0

克隆的ArrayList最簡單的方法:

al.add(i++, al_1.clone()) 
相關問題