将元素添加到列表正在更新其所有以前的元素
问题描述:
我有一个类型为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
的声明即可。