java - 在java中进行深拷贝

标签 java clone

给定以下代码:

ArrayList<String> original = new ArrayList<String>();
    original.add("one");
    original.add("two");
    original.add("three");

    Cache ch = new Cache();
    ch.store(original);

    original.remove(0);
    original.remove(0);
    System.out.println("modified list is"+original);
    System.out.println("cache list is"+ch.getCache());

和一个缓存类:

public class Cache {
private ArrayList<String> clone = new ArrayList<String>();

public void store(ArrayList<String> original){
    this.clone = original;
}

public ArrayList<String> getCache(){
    return this.clone;
}

}

输出是:

modified list is[three]
cache list is[three]

其实我是想用缓存来存储原来包含“一,二,三”的列表。当它存储该列表,并使用“原始”列表实现删除时,它不会影响存储在缓存中的列表,这意味着它仍然包含“一、二、三”。那怎么办呢?

最佳答案

您只存储了对列表的引用,所以您得到的结果是预期的!

相反,在构建时制作副本:

public void store(ArrayList<String> original){
    clone = new ArrayList<String>(original);
}

关于java - 在java中进行深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646089/

相关文章:

java - 用于解析具有相同类型表达式的字符串的正则表达式

java - 为什么我的 Android ORM 库会生成这些奇怪的字符串?

java - 有什么理由更喜欢 System.arraycopy() 而不是 clone()?

JQuery 将类添加到克隆元素

java - 如何克隆/复制WeakHashMap? (深拷贝)

java - JUnit 测试 - 进行测试的最佳且最可靠的方法?

java - 在 Web 应用程序中从 JAR 读取 XML 文件

java - Blob Store 响应 415 Unsupported Media Type

jquery - 使用 jQuery clone 只复制 1 行的类名

Java克隆()查询