Java 将ArrayList的项添加到ArrayList的其他ArrayList

Java 将ArrayList的项添加到ArrayList的其他ArrayList,java,arraylist,Java,Arraylist,我在列表a中添加了一个项目,然后在列表b中添加了列表a,并再次执行了相同的操作 我的问题是,如果我打印b.get(0)和b.get(1),我会得到相同的列表,这两个项目都是“一”和“二”,为什么会这样 在b.get(0)中,我只想获取我添加的一项,即a.add(“一”) 添加a.add(“两个”)后,如果我打印b.get(1)我应该同时获得“一个”和“两个” 是否有任何解决方案或更改来管理此问题 List<String> a= new ArrayList<String>(

我在列表
a
中添加了一个项目,然后在列表
b
中添加了列表
a
,并再次执行了相同的操作

我的问题是,如果我打印
b.get(0)
b.get(1)
,我会得到相同的列表,这两个项目都是
“一”
“二”
,为什么会这样

b.get(0)
中,我只想获取我添加的一项,即
a.add(“一”)

添加
a.add(“两个”)
后,如果我打印
b.get(1)
我应该同时获得
“一个”
“两个”

是否有任何解决方案或更改来管理此问题

List<String> a= new ArrayList<String>();
List<List<String>> b= new ArrayList<List<String>>();

a.add("One");
b.add(a);

a.add("Two");
b.add(a);

System.out.println("b="+b.get(0));
System.out.println("b="+b.get(1));

您将添加两次相同的列表,因此您将看到外部列表的两个索引的相同元素

要添加两个不同的
列表
,必须先创建一个新的
数组列表
,然后再将每个元素添加到外部
列表

a.add("One");
b.add(a);

a = new ArrayList<>(a); // assuming you want the second list to contain both "One" and "Two"
a.add("Two");
b.add(a);
a.添加(“一”);
b、 添加(a);
a=新阵列列表(a);//假设您希望第二个列表同时包含“一”和“二”
a、 添加(“两”);
b、 添加(a);

您将添加两次相同的列表,因此您将看到外部列表的两个索引的相同元素

要添加两个不同的
列表
,必须先创建一个新的
数组列表
,然后再将每个元素添加到外部
列表

a.add("One");
b.add(a);

a = new ArrayList<>(a); // assuming you want the second list to contain both "One" and "Two"
a.add("Two");
b.add(a);
a.添加(“一”);
b、 添加(a);
a=新阵列列表(a);//假设您希望第二个列表同时包含“一”和“二”
a、 添加(“两”);
b、 添加(a);

您正在b[0]和b[1]中添加相同的引用。如果您想在列表b的不同索引处有不同的列表,您必须创建一个新的列表对象

        List<String> a= new ArrayList<String>();
    List<String> c= new ArrayList<String>();
    List<List<String>> b= new ArrayList<List<String>>();
    a.add("One");
    b.add(a);

    c= new ArrayList<String>();
    c.addAll(a);
    c.add("Two");
    b.add(c);

    System.out.println("b="+b.get(0));
    System.out.println("b="+b.get(1));
List a=new ArrayList();
列表c=新的ArrayList();
列表b=新的ArrayList();
a、 添加(“一”);
b、 添加(a);
c=新的ArrayList();
c、 阿道尔(a);
c、 添加(“两”);
b、 添加(c);
System.out.println(“b=“+b.get(0));
System.out.println(“b=“+b.get(1));

您正在b[0]和b[1]中添加相同的引用。如果您想在列表b的不同索引处有不同的列表,您必须创建一个新的列表对象

        List<String> a= new ArrayList<String>();
    List<String> c= new ArrayList<String>();
    List<List<String>> b= new ArrayList<List<String>>();
    a.add("One");
    b.add(a);

    c= new ArrayList<String>();
    c.addAll(a);
    c.add("Two");
    b.add(c);

    System.out.println("b="+b.get(0));
    System.out.println("b="+b.get(1));
List a=new ArrayList();
列表c=新的ArrayList();
列表b=新的ArrayList();
a、 添加(“一”);
b、 添加(a);
c=新的ArrayList();
c、 阿道尔(a);
c、 添加(“两”);
b、 添加(c);
System.out.println(“b=“+b.get(0));
System.out.println(“b=“+b.get(1));

原因在于您的代码中,b.get(0)和b.get(1)指向相同的列表a,因此输出是相同的

使用此代码可以实现您想要的, 列表a1=新的ArrayList(); 列表a2=新的ArrayList(); 列表>b=新阵列列表>()

产出是,, b=[一] 100
b=[Two]

原因在于您的代码中,b.get(0)和b.get(1)指向相同的列表a,因此输出是相同的

使用此代码可以实现您想要的, 列表a1=新的ArrayList(); 列表a2=新的ArrayList(); 列表>b=新阵列列表>()

产出是,, b=[一] 100
b=[Two]

您仍在处理
ArrayList
的同一实例,因此索引1和索引2处的列表
b
引用了您仍在处理
ArrayList
的同一实例的
,因此,索引1和索引2处的列表
b
引用了
ArrayList