将元素添加到列表正在更新其所有以前的元素

问题描述:

我有一个类型为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循环打破了所有列表中的数组元素包含相同的数组(实际上是添加的最后一个数组)。如何阻止它从更新的以前添加的阵列,请帮助。

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

您需要在每次循环时创建一个新数组 - 每次只创建一个数组。只需在循环内移动parsedFields的声明即可。