将元素添加到列表是更新以前的所有元素

时间:2014-12-07 17:39:36

标签: java android

我有类型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循环中断时,列表中的所有数组元素都包含相同的数组(实际上是最后添加的数组)。如何阻止更新以前添加的阵列,请帮忙。

2 个答案:

答案 0 :(得分:3)

将parsedFields的声明移到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 :(得分:1)

每次循环时都需要创建一个新数组 - 此刻你只需创建一个。只需在循环中移动parsedFields的声明。