Hashtable kopieren ohne Referenz

Hallo,

wie kann man eine Hashtable kopieren ohne dass die Referenzen mitgenommen werden ?

Ich habe im Wertefeld der Hashtable Objecte liegen. Wenn ich nun die Hashtable X auf die Hashtable Y kopiere möchte ich nicht, dass sich die Object aus Table X änderen wenn ich die Object in Table Y ändere.

Mit Hashtable.clone() hatte ich keinen erfolg.

Muß ich tatsächlich über Table X loopen und die Object in Y neu anlegen ?

Danke
Albert

Moin

Mit Hashtable.clone() hatte ich keinen erfolg.

Das glaub ich dir nicht:

import java.util.\*;

public class test {

 public static void main (String[] A){
 Hashtable H1 = new Hashtable();
 H1.put (new Integer (1),new Integer (1));
 Hashtable H2 = (Hashtable) H1.clone();
 H2.put (new Integer (2),new Integer (2));
 H1.put (new Integer (3),new Integer (3));

 System.out.println (H1);
 System.out.println (H2);
 }
}

cu

Also in der jdk 1.5 Dokumentation unter HashTable.clone() steht:
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.
Um alse eine deep copy zu erhalten bleibt ihm wohl nichts anderes übrig als alle in der HashTable vorhandenen Objekte selbst zu kopieren.

möchte nicht, dass sich die Object aus Table X änderen wenn ich die in Table Y ändere.
Mit Hashtable.clone() hatte ich keinen erfolg.

Das glaub ich dir nicht:
(…)

ich denke er will folgendes verhindern:

import java.util.Hashtable;

public class HTTest
{
 public static void main(String args[])
 {
 Hashtable h1 = new Hashtable();

 h1.put("1",new StringBuffer("original"));
 Hashtable h2 = (Hashtable) h1.clone();

 ((StringBuffer)h2.get("1")).append("\_changed");

 System.out.println(h1);
 System.exit(0);
 }
}

Das haut mit clonen der Hashtable nicht hin, da die Inhalte ansonsten auf die selben Objekte referenzieren, wenn diese nicht auch geklont werden.

gruß
Heavy