JAVA Arraylist意外输出

JAVA Arraylist意外输出,java,list,arraylist,Java,List,Arraylist,预期产出: 细胞1细胞2 细胞3细胞4 但我得到的结果是: 细胞3细胞4 细胞3细胞4 为什么会这样 import java.util.ArrayList; public class Test { public static void main(String... a) { String[][] var1 = new String[] []{{"Cell-1","Cell-2"},{"Cell-3","Cell-4"}}; ArrayList<String> r =

预期产出: 细胞1细胞2 细胞3细胞4

但我得到的结果是: 细胞3细胞4 细胞3细胞4

为什么会这样

import java.util.ArrayList;

public class Test {
public static void main(String... a) {
    String[][] var1 = new String[] []{{"Cell-1","Cell-2"},{"Cell-3","Cell-4"}};
    ArrayList<String> r = new ArrayList<String>();
    ArrayList<ArrayList<String>> var = new ArrayList<ArrayList<String>>();

    //Insering data into the ArrayList.
    for(String[] row : var1){
        r.clear();
        for(String data : row){
            r.add(data);
        }
        var.add(r);
    }

    //Print data to console.
    for(ArrayList<String> r1 : var){
        for(String cell : r1)
            System.out.print(cell+" ");
        System.out.println();
    }
}
import java.util.ArrayList;
公开课考试{
公共静态void main(字符串…a){
字符串[][]var1=新字符串[][{{“Cell-1”、“Cell-2”}、{“Cell-3”、“Cell-4”};
ArrayList r=新的ArrayList();
ArrayList var=新的ArrayList();
//将数据插入ArrayList。
for(字符串[]行:var1){
r、 清除();
用于(字符串数据:行){
r、 添加(数据);
}
var.add(r);
}
//将数据打印到控制台。
for(ArrayList r1:var){
用于(字符串单元格:r1)
系统输出打印(单元格+“”);
System.out.println();
}
}
}
`这一点也不意外:您向
ArrayList var
添加了两次相同的对象,即
ArrayList r
。首先,当它有
Cell-1 Cell-2
时添加它,然后清除它,然后使用
Cell-3 Cell-4
添加它。问题是,当调用
r.clear()
时,添加到
var
的数组列表也会被清除


您需要创建一个新的
ArrayList
而不是清除现有的列表来解决此问题:将
r.clear()
替换为
r=new ArrayList()
,问题就会消失。

这不是答案。您应该改用
List
。@adarshr:使用List比使用ArrayList有什么好处?