Copying a HashMap in Java
I am trying to keep a temporary container of a class that contains member :
HashMap<Integer,myObject> myobjectHashMap
A class called myobjectsList
Then I do
myobjectsListA = new myobjectsList();
myobjectsListB = new myobjectsList();
then: Add some hashmap items to A (like 2)
then:
myobjectListB = myobjectListA; //B has 2
then: Add hashmap items to A (like 4 more)
then: return A to the items stored in B
myobjectListA = myobjectListb;
But when I do this, B grows with A while I am adding hashmap items to A. A now has 6 items in it because B had 6.
I want A to still have the original 2 at the end after last assignment. In C++ I would use copy with objects, what is the java equivalent?
Added: OK I left something out explaining this. MyObjectsList
does not contain the HashMap, it is derived from a class MyBaseOjbectsList
which has the HashMap member and MyObjectsList
extends MyBaseOjbectsList
. Does this make a difference?
Solution 1:
If you want a copy of the HashMap you need to construct a new one with.
myobjectListB = new HashMap<Integer,myObject>(myobjectListA);
This will create a (shallow) copy of the map.
Solution 2:
You can also use
clone()
Method to copy all elements from one hashmap to another hashmap
Program for copy all elements from one hashmap to another
import java.util.HashMap;
public class CloneHashMap {
public static void main(String a[]) {
HashMap hashMap = new HashMap();
HashMap hashMap1 = new HashMap();
hashMap.put(1, "One");
hashMap.put(2, "Two");
hashMap.put(3, "Three");
System.out.println("Original HashMap : " + hashMap);
hashMap1 = (HashMap) hashMap.clone();
System.out.println("Copied HashMap : " + hashMap1);
}
}
source : http://www.tutorialdata.com/examples/java/collection-framework/hashmap/copy-all-elements-from-one-hashmap-to-another
Solution 3:
The difference is that in C++ your object is on the stack, whereas in Java, your object is in the heap. If A and B are Objects, any time in Java you do:
B = A
A and B point to the same object, so anything you do to A you do to B and vice versa.
Use new HashMap()
if you want two different objects.
And you can use Map.putAll(...)
to copy data between two Maps.