2013-10-15 69 views
3

這看起來很平凡,但我無法將2D String ArrayList複製到整個新的2D String ArrayList數據結構中。複製2D字符串ArrayList

public static ArrayList<ArrayList<String>> copy(ArrayList<ArrayList<String>> input) { 

    ArrayList<ArrayList<String>> copy = new ArrayList<ArrayList<String>>(); 

    for(int i = 0; i < input.size(); i++) { 
     ArrayList<String> line = input.get(i); // Issue here? 
     for(int j = 0; j < input.get(i).size(); j++) { 
      line.set(j, input.get(i).get(j)); 
     } 
    } 
    return copy; 
} 

我不希望做一個淺拷貝,我試圖遍歷整個ArrayList和其複製到一個新的。我覺得我沒有用我的行ArrayList正確初始化行,但我認爲ArrayList數據結構的全部要點是可以將數據添加到它而不用初始化大小?

它看起來第一行被正確複製,但當我嘗試添加後續行時,我正在索引超出範圍。

+0

'的ArrayList >拷貝=新的ArrayList <>(輸入);'?? – MadProgrammer

+0

你爲什麼有內循環?我認爲你可以使用 (int i = 0; i

+0

@Thuiya不會複製'ArrayList',它不是Java而是C++。 – Vallentin

回答

2
public static ArrayList<ArrayList<String>> copy(ArrayList<ArrayList<String>> input) { 
    ArrayList<ArrayList<String>> copy = new ArrayList<ArrayList<String>>(input.size()); 
    for(int i = 0; i < input.size(); i++) { 
     ArrayList<String> line = input.get(i); 
     copy.set(i, new ArrayList<String>(line.size())); // add internal array initialization 
     for(int j = 0; j < line.size(); j++) { 
      copy.get(i).set(j, line.get(j)); // actually copy value into new array 
     } 
    } 
    return copy; 
} 
+0

感謝您的評論解釋! – JAL

+0

在這一行上出現越界錯誤(與其他解決方案相同):'copy.set(i,new ArrayList (line.size()));'任何想法爲什麼字符串沒有被添加到ArrayList正常嗎? – JAL

+1

@JAL change'set(i''' set(j' to'add(' –

2

您忘記在ArrayList本身內部創建ArrayList

public static ArrayList<ArrayList<String>> copy(ArrayList<ArrayList<String>> input) { 

    ArrayList<ArrayList<String>> copy = new ArrayList<ArrayList<String>>(); 

    for(int i = 0; i < input.size(); i++) { 
     ArrayList<String> line = new ArrayList<String>(); 

     for(int j = 0; j < input.get(i).size(); j++) { 
      line.add(input.get(i).get(j)); 
     } 

     copy.add(line); 
    } 
    return copy; 
} 
+0

欣賞迴應。謝謝! – JAL

+0

在這一行line.set(j,input.get(i).get(j))上仍然得到IndexOutOfBoundsException Index:0,Size:0。任何想法可能是錯的?如果我輸入值input.get(i).get(j),我得到一個有效的字符,但它沒有被正確添加到ArrayList – JAL

+1

我編輯了我的答案。 – Vallentin