Klonen ConcurrentHashMap - Java, Klon, Concurrenthashmap

Warum kann ich nicht klonen? ConcurrentHashMap?

ConcurrentHashMap<String, String> test = new ConcurrentHashMap<String, String>();
test.put("hello", "Salaam");

ConcurrentHashMap<String, String> test2 = (ConcurrentHashMap<String, String> ) test.clone();

System.out.println(test2.get("hello"));

Wenn ich benutze HashMap Anstatt von ConcurrentHashMap, Es klappt.

Antworten:

5 für die Antwort № 1

Das clone() Methode an AbstractMap ist nicht zum Kopieren gedacht, es ist eine interne Methode, beachten Sie das geschützte Schlüsselwort.

protected Object clone() throws CloneNotSupportedException {

HashMap hat zufällig ein Publikum clone(), aber das bedeutet nicht, dass Sie es verwenden sollten, dies wird weiter diskutiert Effektives Java: Analyse der clone () Methode

Eine flexiblere Möglichkeit zum Erstellen von Kopien von Sammlungen ist über die Kopierkonstruktoren. Diese haben den Vorteil, dass sie jede Map-Implementierung aus beliebigen anderen erstellen können.

/**
* Creates a new map with the same mappings as the given map.
*
* @param m the map
*/
public ConcurrentHashMap(Map<? extends K, ? extends V> m) {

z.B.

ConcurrentHashMap<String, String> original = new ConcurrentHashMap<String, String>();
original.put("hello", "Salaam");

Map<String, String> copy = new ConcurrentHashMap<>(original);
original.remove("hello");
System.out.println(copy.get("hello"));

Speisekarte