Der Gleiche oder der Selbe?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich habe einen Hashtable():

Hashtable x = new Hashtable();
x.add("Key1","Val1");

Jetzt möchte ich diesen Hashtable kopieren:

Hashtable y = x;

Füge ich jetzt in x noch einen Eintrag dazu ist er auch in y. Wie kann ich eine Kopie des Hashtables erstellen und nicht auf das vorhandene Objekt referenzieren?
 

diggaa1984

Top Contributor
public Object clone()
Creates a shallow copy of this hashtable. All the structure of the hashtable itself is copied, but the keys and values are not cloned. This is a relatively expensive operation.

allerdings wie es da steht eine "flache Kopie" .. also, wenn du da keine einfachen Datenstrukturen verwendest, kanns sein das die geklonten Daten dennoch selbe membervariablen verwenden .. ne deep-copy müsstest selbst machen
 
G

Guest

Gast
Ich habe einen Hashtable in einen Hashtable geschachtelt.

Code:
Enumeration e = hash1.keys();
while (e.hasMoreElements){
   String key = e.nextElement();
   Hashtable val = hash1.get(key);
   // HIER IN DER SCHLEIFE
}

Reicht zu einer deep copy dann in der Schleife ein:
Code:
hashCopy.put(key,val);


Oder muss ich jetzt den geschachtelten Hash nochmal durchlaufen?

bzw kann ich:

Code:
hash2Copy = val.clone();
hashCopy.put(key,hash2Copy);

Im zweiten Hash sind Key und Val ein String.
 

andre111

Bekanntes Mitglied
Benutz halt einfach den copy-Konstruktor:

Code:
Hashtable h1 = new Hashtable();
h1.put("key1","key2");
Hashtable h2 = new Hashtable(h1);
 

diggaa1984

Top Contributor
Benutz halt einfach den copy-Konstruktor:
Code:
Hashtable h1 = new Hashtable(); 
h1.put("key1","key2"); 
Hashtable h2 = new Hashtable(h1);

da würde ich aber mal behaupten das da definitiv die selben Objekte drin liegen und nicht wie der ThreadOpener fordert die Gleichen

was die Frage vom TO angeht:

du hast also:

Hashtable<String,Hashtable<String,String>> !?

da würde ich sagen, das du auch den inneren Hashtable clonen musst, da du sonst diesen bearbeiten würdest.
Im äußeren clone() kopierst alle keys und values in einen neuen Hashtable rein. Bei Strings ist das im Prinzip egal, aber der innere Hashtable würde so übernommen werden, und du hättest Änderungen im Klon wie im Original. Folglich müsstest den inneren Hash nochmal clonen, was dieser Doku-Comment bestätigen würde.

Creates a shallow copy of this hashtable. All the structure of the hashtable itself is copied, but the keys and values are not cloned.

Man korrigiere mich, wenn ich das falsch interpretiere :D
 

byte

Top Contributor
diggaa1984 hat gesagt.:
da würde ich aber mal behaupten das da definitiv die selben Objekte drin liegen und nicht wie der ThreadOpener fordert die Gleichen
Die selben Objekte sind auch immer die gleichen! :roll:

Wenn eh nur Strings in der Map liegen, ist es aber wurscht, ob man eine Deep oder Shallow Copy macht, da Strings sowieso immutable sind.
 

diggaa1984

Top Contributor
byto hat gesagt.:
Wenn eh nur Strings in der Map liegen, ist es aber wurscht, ob man eine Deep oder Shallow Copy macht, da Strings sowieso immutable sind.

aber es ist doch ein unterschied ob ich mit outerHashCopy.val auf die selbe Hashtable referenziere oder auf eine echte Kopie davon, oder nicht!? Mit nem normalen clone() kann ich in der outerHashCopy Änderungen an der inneren Hashtable (outerHashCopy.val) vornehmen, welche sich dann ebenfalls auf die originale innere Hashtable auswirkt, da ja die Referenzen der inneren Hashtable ein und das selbe Objekt liefern.

hashtableOrg = <String,Hashtable<String,String>>
hashtableCopy = hashtableOrg.clone()

wären nun hashtableOrg.val und hashtableCopy.val nicht Referenzen auf ein und die selbe innere Hashtable, sodass Änderungen im Klon auch Änderungen im Original bewirken würden!? Ob Strings nun immutable sind oder nicht dürfte ja nix daran ändern.

Nur wenn man die innere Hashtable noch clonen würde, hätten Änderungen in hashtableCopy keine Auswirkungen mehr auf hashtableOrg.

so, hab dann doch mal n kleines testtool geschrieben:
Code:
import java.util.*;

public class Test {
	
	public static void main(String[] args) {
		//innere Hashtable (wird nich mit geklont)
		Hashtable<String,String> innerHashtable = new Hashtable<String,String>();
		innerHashtable.put("innerFirstKey","innerOrgVal");
		
		//Original-Hashtable
		Hashtable<String,Hashtable<String,String>> hOrg = new Hashtable<String, Hashtable<String,String>>();
		hOrg.put("outerFirstKey",innerHashtable);
		
		//Ausgabe des inneren Hashtables des Originals
		System.out.println(hOrg.get("outerFirstKey").get("innerFirstKey"));	
		
		//Erstellung des Klons durch #clone() (shallow copy)
		Hashtable<String,Hashtable<String,String>> hCopy = (Hashtable<String,Hashtable<String,String>>) hOrg.clone();
		//Änderngen am inneren Hashtable des Klons
		hCopy.get("outerFirstKey").put("innerFirstKey","innerCopyVal");

		//Ausgabe des inneren Hashtables des Originals nach Änderungen im Klon		
		System.out.println(hOrg.get("outerFirstKey").get("innerFirstKey"));	
	}
}
Ausgabe:
innerOrgVal
innerCopyVal
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
berserkerdq2 Ist JVM das gleiche wie IJVM (Bytecode) Java Basics - Anfänger-Themen 1
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
K Wie String prüfen ob drei mal das gleiche Zeichen vorkommt? Java Basics - Anfänger-Themen 7
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
B Jsoup: gleiche Session nutzen Java Basics - Anfänger-Themen 0
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
CptK Interface Beide Panels zeigen das Gleiche Java Basics - Anfänger-Themen 2
J Gleiche Methode in 2 verschiedenen Klassen - Lösung ? Java Basics - Anfänger-Themen 8
B Prüfen, ob Datum2 der gleiche Tag ist wie Datum1 Java Basics - Anfänger-Themen 10
O Problem gleiche Zahlen Java Basics - Anfänger-Themen 2
F Immer wieder gleiche Zufallszahl? Java Basics - Anfänger-Themen 4
N Array gleiche Datentypen zusammenrechnen Java Basics - Anfänger-Themen 28
T Classpath Zwei gleiche Dateinamen in verschiedenen Projekten möglich? Java Basics - Anfänger-Themen 13
L Gleiche Werte aus Array aussortieren Java Basics - Anfänger-Themen 5
L Gleiche Werte im Array hochzählen Java Basics - Anfänger-Themen 4
J Methoden Zwei Methoden die fast das gleiche tun organisieren Java Basics - Anfänger-Themen 3
L Classpath Zwei Bibliotheken enthalten gleiche .class Datei Java Basics - Anfänger-Themen 6
R Enum ist das gleiche wie? Java Basics - Anfänger-Themen 15
H überprüfen ob in Array gleiche int-Zahlen gespeichert werden. Java Basics - Anfänger-Themen 7
K Das Gleiche wiederholen Java Basics - Anfänger-Themen 5
Y Gleiche Arrays aus einem Array mit Objekten Java Basics - Anfänger-Themen 5
O Klasse in ArrayList speichern Problem -gleiche Speicheradresse Java Basics - Anfänger-Themen 2
M Zwei gleiche Eintraege in ArrayList finden Java Basics - Anfänger-Themen 15
D Javaliste auf gleiche Einträge überprüfen Java Basics - Anfänger-Themen 2
E Input/Output Drucken am Mac immer gleiche Schriftgröße?!? Java Basics - Anfänger-Themen 2
I immer die gleiche Zufallszahl Java Basics - Anfänger-Themen 9
L Eine ArrayList auf gleiche Inhalte prüfen Java Basics - Anfänger-Themen 10
M Erste Schritte Eclipse führt immer das gleiche Programm aus Java Basics - Anfänger-Themen 6
J Objekterzeugung im Konstruktor - Mehrfach gleiche Referenzvariable? Java Basics - Anfänger-Themen 4
A Mehrere Gegner sollen das gleiche Bild benutzen Java Basics - Anfänger-Themen 3
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
M gleiche Box in GUI mehrmals verwenden Java Basics - Anfänger-Themen 5
A objekt innerhalb der gleiche klasse Java Basics - Anfänger-Themen 10
S Dasselbe ist nicht das gleiche? Java Basics - Anfänger-Themen 7
K Datentypen Gleiche Zufallszahlen in verschiedenen Datenstrukturen Java Basics - Anfänger-Themen 6
G Gleiche Elemente in Feld zählen Java Basics - Anfänger-Themen 13
B 2D-Array, gleiche Einträge prüfen Java Basics - Anfänger-Themen 5
B Random() gleiche Zahlen ausschließen Java Basics - Anfänger-Themen 30
J Datentypen List - gleiche Einträge bei neuen Objekten Java Basics - Anfänger-Themen 31
N Threads: 4 Threads, 4mal Zugriff auf Array soll nicht der gleiche Zugriff sein Java Basics - Anfänger-Themen 4
S OOP Warum gleiche Instanz der Klasse? (Factory-Muster) Java Basics - Anfänger-Themen 13
F Gleiche JUnit-Tests automatisert mit verschiedenen Methoden ausführen Java Basics - Anfänger-Themen 6
O Zweidemensionales Array auf zwei gleiche Zahlen prüfen Java Basics - Anfänger-Themen 15
D Methode in einer anderen Methode (gleiche Klassse) aufrufen Java Basics - Anfänger-Themen 11
G Zählen gleiche Werte in Array Java Basics - Anfänger-Themen 5
Gama 2 (fast) gleiche Dateien - nur eine funktioniert Java Basics - Anfänger-Themen 2
B Gleiche Ordner löschen Java Basics - Anfänger-Themen 15
V Vector/Arraylist hat nur gleiche Einträge Java Basics - Anfänger-Themen 3
G Warum das Prog mehrmals das gleiche macht wegen ItemListener Java Basics - Anfänger-Themen 4
Z Feld prüfen ob 3 gleiche zahlen nach einander vorkommen Java Basics - Anfänger-Themen 3
E Gleiche Methode einer (Kinds?)Klasse erneut aufrufen Java Basics - Anfänger-Themen 2
G gleiche Strings ungleich? Java Basics - Anfänger-Themen 5
K Neue Werte für gleiche Array-Indexe Java Basics - Anfänger-Themen 16
G Gleiche Aktionen verarbeiten (aber nur einmal Code)? Java Basics - Anfänger-Themen 2
M bewirken diese Schreibweisen das gleiche? :) Java Basics - Anfänger-Themen 8
F zugriff auf gleiche klasse aus mehreren klassen. Java Basics - Anfänger-Themen 3
G 2 gleiche Strings Java Basics - Anfänger-Themen 2
Z Vector führt mehrer, aber gleiche Elemente Java Basics - Anfänger-Themen 6
A Selbe Aufgaben stellung, andere Lösung Java Basics - Anfänger-Themen 7
S Immer das selbe mit den Schleifen Java Basics - Anfänger-Themen 24
C OOP Von mehreren Klassen aus auf das selbe Objekt zugreifen Java Basics - Anfänger-Themen 8
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
M !boolean das selbe wie boolean == false? Java Basics - Anfänger-Themen 3
I Zwei Mal das selbe Objekt per Random :( Java Basics - Anfänger-Themen 7
S Zwei Programme verwenden eine selbe Klasse Java Basics - Anfänger-Themen 4
M Wie kann man auf die Konsole an die selbe Stelle schreiben? Java Basics - Anfänger-Themen 4
Silver-Blue mehrere Instanzen einer Klasse, trotz Random immer das Selbe Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben