Kopieren einer HashMap in Java
Ich bin versucht zu halten, eine temporäre container, einer Klasse, enthält Mitglied :
HashMap<Integer,myObject> myobjectHashMap
Einer Klasse namens myobjectsList
Dann Mach ich
myojbectsListA = new myojbectsList();
myojbectsListB = new myobjectsList();
dann: Fügen Sie einige hashmap Elemente zu Einem (like2)
dann
myobjectListB = myobjectListA; //B has 2
dann: Hinzufügen hashmap Elemente, die zu A; (wie 4)
dann wieder Ein, um die gespeicherten Elemente in B;
myobjectListA = myobjectListb;
aber wenn ich das mache B wächst mit, während ich hinzufügen hashmap Elemente von A.
Eine hat nun 6 Elemente, denn B hatte die 6.
Will ich Einen haben original 2 immer noch am Ende nach der letzten Zuweisung
in C++ würde ich verwenden, kopieren Sie mit Objekten, was ist das java-äquivalent?
Hinzugefügt: OK, ich Links etwas heraus zu erklären.MyObjectsList enthält nicht die HashMap, es von einer Klasse abgeleitet ist MyBaseOjbectsList die die HashMap Mitglied und MyObjectsList erstreckt MyBaseOjbectsList. Macht das einen Unterschied.?
InformationsquelleAutor der Frage user691305 | 2012-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, eine Kopie der HashMap, die Sie brauchen, um zu konstruieren, eine neue mit.
Dadurch wird eine (flache) Kopie von der Karte.
InformationsquelleAutor der Antwort ratchet freak
Können Sie auch
Methode kopiert alle Elemente aus einer hashmap zu einer anderen hashmap
Programm für kopieren alle Elemente aus einer hashmap zu einer anderen
Quelle : http://www.tutorialdata.com/examples/java/collection-framework/hashmap/copy-all-elements-from-one-hashmap-to-another
InformationsquelleAutor der Antwort user2236292
Der Unterschied ist, dass in C++ das Objekt auf dem stack, in der Erwägung, dass in Java das Objekt im heap. Wenn A und B sind Objekte, die jederzeit in java Sie
B = A
A und B auf das GLEICHE Objekt zeigen. Also alles, was Sie tun, um A zu B und Umgekehrt
verwenden new HashMap (), wenn Sie zwei verschiedene Objekte
Und können Sie Zuordnen.putAll(...) zum kopieren von Daten zwischen zwei Karten
InformationsquelleAutor der Antwort ControlAltDel
Gibt es eine kleine (GROßE) understatement hier. Wenn Sie kopieren möchten
HashMap
mit verschachtelten Strukturen,HashMap.putAll()
kopieren wird durch einen Verweis, weil Sie nicht wissen, wie genau die Kopie Ihres Objekts. Beispielsweise:Also im Grunde, Sie müssen kopieren Sie die Felder, die sich wie hier
InformationsquelleAutor der Antwort murt
In Java, wenn Sie schreiben:
objectA
undobjectB
sind identisch und zeigen auf die gleiche Referenz. Ändern, ändern sich die anderen. Also, wenn Sie ändern den Zustand derobjectA
(nicht Referenz)objectB
werden widerspiegeln, dass zu ändern.Jedoch, wenn Sie schreiben:
Dann
objectB
ist noch auf dem ersten Objekt (originalobjectA
), währendobjectA
zeigt jetzt auf ein neues Objekt.InformationsquelleAutor der Antwort assylias
Da diese Frage ist noch unbeantwortet und ich hatte ein ähnliches problem, ich werde versuchen diese zu beantworten. Das problem (wie andere schon erwähnt) ist, dass Sie nur kopieren, Referenzen auf das gleiche Objekt, und damit ein ändern Sie auf der Kopie ändern auch das origin-Objekt. Also, was Sie müssen, ist, um das Objekt zu kopieren (Ihre map-Wert) selbst. Der weitaus einfachste Weg, dies zu tun ist, um alle Ihre Objekte implementieren das serializeable interface. Dann serialisieren und Deserialisieren Sie Ihre Karte, um eine echte Kopie. Sie können dies tun, indem Sie sich oder verwenden Sie den apache commons SerializationUtils#clone (), die Sie hier finden können: https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/SerializationUtils.html Aber bewusst sein, dies ist der einfachste Ansatz, aber es ist eine teure Aufgabe, serialisieren und Deserialisieren einer Menge von Objekten.
InformationsquelleAutor der Antwort KIC
Was Sie ordnen einem Objekt zum anderen, was Sie tun, ist das kopieren der Referenz auf das Objekt, nicht der Inhalt. Was Sie tun müssen, ist Ihr Objekt B und manuell kopieren Sie den Inhalt von Objekt A in es.
Wenn Sie dies zu oft, sollten Sie erwägen, die Implementierung eines
clone()
Methode in der Klasse, erstellen ein neues Objekt vom gleichen Typ, und kopieren Sie alle ist es Inhalt in das neue Objekt.InformationsquelleAutor der Antwort zigdon