Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArrayList.clone()方法在Java中是如何工作的?_Java_List_Arraylist_Clone_Cloning - Fatal编程技术网

ArrayList.clone()方法在Java中是如何工作的?

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

我对数组列表中的克隆概念感到困惑。 例如:

输出:-

气球[颜色=新绿色地址=地址{状态]= greenState,city=greencity}]
气球[颜色=绿色地址=地址 {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