ajay
ajay

Reputation: 125

How to copy an object so that original does not change while changing copied one

I want to write a method in java which gives ArrayList<ArrayList<Integer>> (say result) from ArrayList<ArrayList<Integer>>(say original) without changing the original one. So I have to first store original in some variable but i dont find a proper or easy way

for ex. I want to remove a certain object (Integer) from original this is how i am coding

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;
}

plz suggest me if there is any shortcut method

Upvotes: 0

Views: 136

Answers (2)

nmore
nmore

Reputation: 2573

The following is close to the best that you can do in java:

ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
for(ArrayList<Integer> list : result){
    result.add(list.clone());
}

Also for future reference, what you are doing is called a "deep copy". Search that term for more info.

Upvotes: 0

Eran
Eran

Reputation: 393771

You can use addAll :

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

Alternately, you can use clone :

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);
}

Upvotes: 1

Related Questions