Java 创建ArrayList的ArrayList,与ArrayList的另一个ArrayList相比,该ArrayList具有一个附加元素
我有一个ArrayList of ArrayList(alal)和一个ArrayList(al)。我想将al插入alal,但我希望alal.get(0)包含al拥有的所有内容以及添加的元素100。我认为做这件事最简单的方法就是先做 加上(al) 然后访问它的第0个元素,并添加一个100,如 alal.get(0)和add(100) 然而,问题是al的内容也会改变,因为它是一个对象,所以alal持有它的引用,而不是值 我在下面试过了。请告诉我这是否是正确的方法,或者提出改进建议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
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答案。这在你的情况下并不特别重要,但要记住这一点也不错。