java - arraylist 的副本不断被修改为原始值

标签 java arraylist copy duplicates clone

我正在开发一个用于保存和调用屏幕状态的系统,这是我第一次弄乱这种东西,所以我不太确定最好的方法是什么,但我目前存储了所有数组列表中的“PreviewMonitor”对象(大约 40 个左右)。问题是,当我创建一个名为“allPreviewMonitors”的 ArrayList 的副本进行存储时,我最终得到一个 ArrayList,其中的元素随着原始元素的更新而不断变化。这几乎就像我正在使用原始 ArrayList,而事实上,当我创建 allPreviewMonitors 的副本时,它应该是一个完全不同的 ArrayList,具有元素的“卡住”版本及其状态。为什么会发生这种行为?如果需要,我可以显示代码,但我不确定这里是否需要它。

最佳答案

数组列表 与所有集合 一样,仅包含对对象的引用。 仅仅复制 List 是不够的,您还必须在创建 List 的副本时 clone() 列表中的元素(或创建新元素,或使用复制构造函数)。

这称为制作“深拷贝”,而您当前拥有的是“浅拷贝”。

关于java - arraylist 的副本不断被修改为原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14742437/

相关文章:

java - 谷歌应用引擎: 1000 records limit still present with JPA?

java - IntelliJ无法在Scala中识别TypeTag

java - 组织.hibernate.exception.SQLGrammarException : Table 'XXX' doesn't exist

excel - 如何使用 VBA 将关闭的工作簿(保持关闭状态)中的数据复制到主工作簿中?

c++ - 是否可以指示编译器删除 C++ 中返回的 variant_t 拷贝?

c++ - 谁在 + 运算符中删除了复制的实例? (c++)

java - 在java中解析vagrant文​​件

java - 当从启动类之外的 ArrayList<Area> 访问区域的边界时,接收到的矩形不正确

java - 将包含 boolean 值的文本文件作为对象读取到数组列表中

java - 确定当前正在使用哪个数组列表?