Java 将一个元素添加到列表中就是更新它以前的所有元素

Java 将一个元素添加到列表中就是更新它以前的所有元素,java,android,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++) {

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

将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);
}
List myList=new ArrayList();
while(getType()){
String[]parsedFields=新字符串[fieldsToParse.length];
// …
for(int i=0;i
每次在循环中都需要创建一个新的数组-此时只创建一个。只需将
parsedFields
的声明移动到循环中即可

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