2014-12-07 93 views
2

我有一個類型爲String[]的列表,其中在循環內添加數組運行n次。將元素添加到列表正在更新其所有以前的元素

String[] parsedFields = new String[fieldsToParse.length]; 
List<String[]> myList= new ArrayList<String[]>(); 

while (getType()) { 
    // ... 
    for (int i = 0; i < fieldsToParse.length; i++) { 
     if (name.equals(fieldsToParse[i])) { 
parsedFields[i] = fieldsToParse; 
// ... 
     } 
    } 
    myList.add(parsedFields); 
} 

每次將數組添加到列表中時,數組都是相同的,但數值不同。

問題是我每次在新的迭代中添加一個數組時,列表中的所有以前添加的數組根據最後一個數組的內容添加更新?

例如,在第一次迭代myList包含:

myList > array > [0] = [1, 1, 'A'] 

在第二次迭代列表將變爲:

myList > array > [0] = [2, 2, 'B'] 
myList > array > [0] = [2, 2, 'B'] 

,並在第三,它將:

myList > array > [0] = [3, 3, 'C'] 
myList > array > [0] = [3, 3, 'C'] 
myList > array > [0] = [3, 3, 'C'] 

當while循環打破了所有列表中的數組元素包含相同的數組(實際上是添加的最後一個數組)。如何阻止它從更新的以前添加的陣列,請幫助。

回答

3

將parsedField的聲明移至while循環中。否則你只是更新相同的數組,並在myList中創建一個新的引用來指向它。

List<String[]> myList = new ArrayList<String[]>(); 

while (getType()) { 

    String[] parsedFields = new String[fieldsToParse.length]; 
    // … 

    for (int i = 0; i < fieldsToParse.length; i++) { 
     if (name.equals(fieldsToParse[i])) { 
      parsedFields[i] = fieldsToParse; 
// ... 
     } 
    } 
    myList.add(parsedFields); 
} 
1

您需要在每次循環時創建一個新數組 - 每次只創建一個數組。只需在循環內移動parsedFields的聲明即可。