ArrayList.clone()方法在Java中是如何工作的?
我对数组列表中的克隆概念感到困惑。 例如: 输出:- 气球[颜色=新绿色地址=地址{状态]= greenState,city=greencity}]ArrayList.clone()方法在Java中是如何工作的?,java,list,arraylist,clone,cloning,Java,List,Arraylist,Clone,Cloning,我对数组列表中的克隆概念感到困惑。 例如: 输出:- 气球[颜色=新绿色地址=地址{状态]= greenState,city=greencity}]气球[颜色=绿色地址=地址 {state=greenState,city=greencity}]气球[color=NewGreen 地址=地址{state=helloState,city=greencity}] 气球[颜色=绿色地址=地址{state=helloState,城市]= 绿色城市}] 这一点我很清楚。但是现在让我们来看看数组列表 Bal
气球[颜色=绿色地址=地址 {state=greenState,city=greencity}]
气球[color=NewGreen 地址=地址{state=helloState,city=greencity}]
气球[颜色=绿色地址=地址{state=helloState,城市]= 绿色城市}]
这一点我很清楚。但是现在让我们来看看数组列表
Balloon red = new Balloon("Red",new Address("redState", "redCity"));
Balloon blue = new Balloon("Blue",new Address("blueState", "blueCity"));
Balloon yellow = new Balloon("yellow",new Address("yellowState", "yellowCity"));
ArrayList<Balloon> list = new ArrayList<>();
list.add(red);
list.add(blue);
list.add(yellow);
ArrayList<Balloon> listCopy = (ArrayList<Balloon>)list.clone();
Balloon green = new Balloon("Green",new Address("greenState", "greencity"));
list.get(1).setColor("color");
list.add(green);
System.out.println(list);
System.out.println(listCopy);
clone
在ArrayList
上不执行深度复制/深度克隆,实际上它执行的是浅层复制,这意味着它不复制它包含的内容,它只复制对这些元素的引用。您仍然只有一个绿色、蓝色和黄色气球。一个列表引用四个引出序号,一个列表引用三个引出序号,这些列表在包含的元素数量方面相互独立。但他们目前所指的实际气球是共享的。谢谢你的回答。我在最后编辑了我的问题,以确认我的理解。你能确认一下它是否正确吗?谢谢@罗斯:是的,没错。
Balloon red = new Balloon("Red",new Address("redState", "redCity"));
Balloon blue = new Balloon("Blue",new Address("blueState", "blueCity"));
Balloon yellow = new Balloon("yellow",new Address("yellowState", "yellowCity"));
ArrayList<Balloon> list = new ArrayList<>();
list.add(red);
list.add(blue);
list.add(yellow);
ArrayList<Balloon> listCopy = (ArrayList<Balloon>)list.clone();
Balloon green = new Balloon("Green",new Address("greenState", "greencity"));
list.get(1).setColor("color");
list.add(green);
System.out.println(list);
System.out.println(listCopy);
list object listCopy
|___ red ___|
|___ blue ___|
|___ yellow ___|
list.add(green);
list object listCopy
|___ red ___|
|___ blue ___|
|___ yellow ___|
|___ green
list.remove(blue);
list object listCopy
|___ red ___|
blue ___|
|___ yellow ___|
|___ green