Java 更改ArrayList(已复制)中项目的值也会更改主ArrayList中项目的值

Java 更改ArrayList(已复制)中项目的值也会更改主ArrayList中项目的值,java,android,Java,Android,我有一个ArrayList,其中添加了一些项目 private List<Product> mMainList = new ArrayList<>(); private List<Product> mCopyList; mMainList.add(new Product(true,"First")); mMainList.add(new Product(true,"Second")); mMainList.add(ne

我有一个ArrayList,其中添加了一些项目

    private List<Product> mMainList = new ArrayList<>();
    private List<Product> mCopyList;

    mMainList.add(new Product(true,"First"));
    mMainList.add(new Product(true,"Second"));
    mMainList.add(new Product(true,"Third"));
现在我正在更改
mCopyList

mCopyList.get(0).setName("First After Change");
问题


我面临的问题是,mMainList正在自动更改。我不想更改mMainList。请建议。谢谢。

尝试像这样克隆主阵列列表

private List<Product> mMainList = new ArrayList<>();
    private List<Product> mCopyList;

    mMainList.add(new Product(true,"First"));
    mMainList.add(new Product(true,"Second"));
    mMainList.add(new Product(true,"Third"));
这不会影响您的主列表。
希望它能帮助你

您可以正确复制列表,但对元素的引用是相同的。因此,您必须进行深度复制。在使用对象克隆技术将数据添加到
mCopyList
时,意味着使用
getter()
setter()
设置数据,然后将数据添加到
mCopyList
。通过使用此技术,您将不会面临此问题。@SwapnilKshirsagar它不起作用。我尝试了'mCopyList=newarraylist(mMainList);Product Product=mCopyList.get(0);product.setName(“更改后的第一个”);product.setActive(假)`@AshishTiwari的链接中有一个例子duplicate@Jens知道了。非常感谢。我在想addAll()和新操作符可以做到这一点。谢谢Hemant。但是它说“clone在java.lang.Objecthello@Hemant Parmar中具有受保护的访问权限。当您更改mCopyList:mCopyList.set(0,“更改后的第一个”)的值时,您能帮我吗?这不会更改mMainList的值。
private List<Product> mMainList = new ArrayList<>();
    private List<Product> mCopyList;

    mMainList.add(new Product(true,"First"));
    mMainList.add(new Product(true,"Second"));
    mMainList.add(new Product(true,"Third"));
mCopyList= (ArrayList<>)mMainList.clone();
mCopyList.get(0).setName("First After Change");