Java 创建ArrayList的ArrayList,与ArrayList的另一个ArrayList相比,该ArrayList具有一个附加元素

Java 创建ArrayList的ArrayList,与ArrayList的另一个ArrayList相比,该ArrayList具有一个附加元素,java,arraylist,pass-by-reference,Java,Arraylist,Pass By Reference,我有一个ArrayList of ArrayList(alal)和一个ArrayList(al)。我想将al插入alal,但我希望alal.get(0)包含al拥有的所有内容以及添加的元素100。我认为做这件事最简单的方法就是先做 加上(al) 然后访问它的第0个元素,并添加一个100,如 alal.get(0)和add(100) 然而,问题是al的内容也会改变,因为它是一个对象,所以alal持有它的引用,而不是值 我在下面试过了。请告诉我这是否是正确的方法,或者提出改进建议 import ja

我有一个ArrayList of ArrayList(alal)和一个ArrayList(al)。我想将al插入alal,但我希望alal.get(0)包含al拥有的所有内容以及添加的元素100。我认为做这件事最简单的方法就是先做

加上(al)

然后访问它的第0个元素,并添加一个100,如

alal.get(0)和add(100)

然而,问题是al的内容也会改变,因为它是一个对象,所以alal持有它的引用,而不是值

我在下面试过了。请告诉我这是否是正确的方法,或者提出改进建议

import java.util.ArrayList;

public class additionalal {
    public static void main(String[] args) {
        ArrayList<ArrayList<Integer>> alal = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> al = new ArrayList<Integer>();
        al.add(1);al.add(2);al.add(3);

        //WRONG
//      alal.add(al);
//      alal.get(0).add(100);

        //CORRECT
        ArrayList<Integer> alextra = new ArrayList<Integer>();
        alextra.addAll(al);
        alextra.add(100);
        alal.add(alextra);

        System.out.println(alal);
        System.out.println(al);
    }
}
import java.util.ArrayList;
公共类附加{
公共静态void main(字符串[]args){
ArrayList alal=新的ArrayList();
ArrayList al=新的ArrayList();
所有增补(1);所有增补(2);所有增补(3);
//错
//加上(al);
//alal.get(0)和add(100);
//正确的
ArrayList alextra=新的ArrayList();
阿列克斯特拉·阿德尔(al);
增补(100);
新增(alextra);
系统输出打印LN(alal);
系统输出打印项次(al);
}
}

添加时将列表包装到新的
数组列表中,从而克隆它:

alal.add(new ArrayList<>(al));
alal.get(0).add(100);
现在,我创建一个
,将其放入
列表
,然后将
的副本放入,比如说,
人组

Person user = new Person();
user.setName("saltandwater");

List<Person> persons = new ArrayList<>();
persons.add(user);

List<List<Person>> personGroups = new ArrayList<>();
personGroups.add(new ArrayList<>(persons));
现在,将新的
Person
添加到
persons
中不会修改
persongroup
。但是,由于未克隆
用户
(仅克隆了
人员
列表),因此
用户名
中的更改将反映在两个列表中:

user.setName("Mr. Yetti");
将导致

persons: [Person[name=Mr. Yetti]]
personGroups: [[Person[name=Mr. Yetti]]]

添加时,将列表包装到新的
ArrayList
,从而克隆它:

alal.add(new ArrayList<>(al));
alal.get(0).add(100);
现在,我创建一个
,将其放入
列表
,然后将
的副本放入,比如说,
人组

Person user = new Person();
user.setName("saltandwater");

List<Person> persons = new ArrayList<>();
persons.add(user);

List<List<Person>> personGroups = new ArrayList<>();
personGroups.add(new ArrayList<>(persons));
现在,将新的
Person
添加到
persons
中不会修改
persongroup
。但是,由于未克隆
用户
(仅克隆了
人员
列表),因此
用户名
中的更改将反映在两个列表中:

user.setName("Mr. Yetti");
将导致

persons: [Person[name=Mr. Yetti]]
personGroups: [[Person[name=Mr. Yetti]]]

有什么问题?如果希望alal.get(0)返回列表al的内容,那么应该将al(实际上是它的一个副本)插入元素0:
alal.add(0,al)
有什么问题?如果希望alal.get(0)返回列表al的内容,那么应该将al(实际上是它的一个副本)插入元素0:
alal.add(0,al)
谢谢,这很好。但是,当你说“注意,列表中的元素不是用它克隆的”时,你是什么意思呢?我在alal中看到了所有元素,即[[1,2,3,100].@saltandwater:Enhanced答案。这在你的情况下并不是特别重要,但要记住也不错。谢谢,这很好。但是,当你说“注意,列表中的元素不是用它克隆的”时,你是什么意思呢?我在alal中看到了所有元素,即[[1,2,3,100].@saltandwater:Enhanced答案。这在你的情况下并不特别重要,但要记住这一点也不错。