Java 如何复制对象,以便在更改复制对象时不更改原始对象

Java 如何复制对象,以便在更改复制对象时不更改原始对象,java,Java,我想用java编写一个方法,它从ArrayList(假设为原始)中给出ArrayList(假设为结果),而不更改原始的方法。所以我必须首先将原始数据存储在某个变量中,但我找不到合适或简单的方法 例如,我想从原始文件中删除某个对象(整数) 这就是我编写代码的方式 static ArrayList<ArrayList<Integer>> rmv(Integer a,ArrayList<ArrayList<Integer>> original){

我想用java编写一个方法,它从
ArrayList
(假设为原始)中给出
ArrayList
(假设为结果),而不更改原始的方法。所以我必须首先将原始数据存储在某个变量中,但我找不到合适或简单的方法

例如,我想从原始文件中删除某个对象(整数) 这就是我编写代码的方式

static ArrayList<ArrayList<Integer>> rmv(Integer a,ArrayList<ArrayList<Integer>> original){

    ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();

    //storing original to other variable

    for(int i=0;i<original.size();i++){
        ArrayList<Integer> temp=new ArrayList<Integer>();
        for(int j=0;j<original.get(i).size();j++){
            temp.add(original.get(i).get(j));
        }
        result.add(temp);
    }

    // not so important here
    for(int i=0;i<b.size();i++){
        result.get(i).remove(a);            
    }
    return result;
}
静态ArrayList rmv(整数a,ArrayList原始){
ArrayList结果=新建ArrayList();
//将原始数据存储到其他变量
对于(int i=0;i您可以使用:

ArrayList:

ArrayList结果=新建ArrayList();

对于(int i=0;i而言,以下内容接近于您在java中所能做到的最佳水平:

ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
for(ArrayList<Integer> list : result){
    result.add(list.clone());
}
ArrayList结果=新建ArrayList();
对于(ArrayList:结果){
result.add(list.clone());
}

另外,为了便于将来参考,您所做的工作被称为“深度复制”。搜索该术语以获取更多信息。

查看关键字
克隆对象java
@hexafraction克隆ArrayList会返回一个浅拷贝,因此克隆外部ArrayList不符合OP的要求。不过,您可以克隆每个内部ArrayList,因为它们包含一个不可变的对象(整数)。addAll不是仍然保留对ArrayList中原始ArrayList的引用吗?克隆肯定会起作用。@Hari addAll
将指定集合中的所有元素追加到此列表的末尾。
。我不是将内部ArrayList添加到外部ArrayList的副本中。我是将每个内部ArrayList的整数添加到e内部ArrayList的新副本。虽然两个列表中的Integer实例相同,但Integer是不可变的,因此没有区别。
ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
for(int i=0;i<original.size();i++){
    ArrayList<Integer> temp = (ArrayList<Integer>) original.get(i).clone();
    result.add(temp);
}
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
for(ArrayList<Integer> list : result){
    result.add(list.clone());
}