Esiste l'utilità java che esegue il metodo clone()
per HashMap
in modo che copi gli elementi della mappa non solo l'oggetto della mappa (come la classe clone()
nella classe HashMap
)?per HashMap in java
risposta
E gli altri oggetti citati negli elementi? Quanto profondo vuoi il tuo clone?
Se i vostri elementi della mappa non hanno alcun riferimento profonde e/o tutto è Serializable
, è possibile serializzare mappa Via ObjectOutputStream
in un ByteArrayOutputStream
e poi deserializzare subito.
L'unica altra alternativa è farlo manualmente.
Una volta che conosci la tua coppia elementi chiave/valore sono clonabile:
HashMap<Foo, Bar> map1 = populateHashmap();
HashMap<Foo, Bar> map2 = new HashMap<Foo, Bar>();
Set<Entry<Foo, Bar>> set1 = map1.entrySet();
for (Entry<Foo, Bar> e : l)
map2.put(e.getKey().clone(), e.getValue().clone());
@Oso: Cosa succede se e.getKey() o e.getValue() è un altro HashMap() o un altro oggetto che richiede anche un clone di copia profonda? –
bene ... questa è una semplice routine clone di hashmap. In realtà suppongo che gli oggetti siano clonabili, quindi le profondità saranno risolte dagli oggetti chiave/valore stessi. Per approfondire un'hashmap senza presupporre serializzabile/clonabile, penso che la riflessione sarebbe un modo (non sono ancora sicuro se vero). – Oso
Date un'occhiata al metodo di deepClone a http://www.devdaily.com/java/jwarehouse/netbeans-src/db/libsrc/org/netbeans/lib/ddl/impl/SpecificationFactory.java.shtml. Non è generico, ma include diversi tipi built-in (incluso HashMap stesso, in modo ricorsivo) e può ovviamente essere esteso.
La domanda SO La raccomandazione di utilità clone profonda è simile a questa e ha an answer that may be helpful to you.
Per riepilogare, si consiglia di utilizzare the Cloning library da Google Code. Per esperienza personale, copia in profondità HashMap
s. Può anche clonare cose che non sono Cloneable
.
Spesso la copia deve essere profonda. Ecco un esempio di come "copia completa"
Map<Integer, ArrayList<Integer>>
codice:
public static Map<Integer, ArrayList<Integer>> deepCopyMapIntList
(Map<Integer, ArrayList<Integer>> original) {
Map<Integer, ArrayList<Integer>> copy = new HashMap<>(original.size());
for (int i : original.keySet()) {
ArrayList<Integer> list = original.get(i);
copy.put(i, (ArrayList<Integer>) list.clone());
}
return copy;
}
- 1. Java: chiave composta in hashmap
- 2. Iterator su HashMap in Java
- 3. Java mettere hashmap in Treemap
- 4. Java XStream con HashMap
- 5. java collisione HashMap
- 6. Java: HashSet vs. HashMap
- 7. java hashmap key iteration
- 8. java reflection per creare campo/valore hashmap
- 9. Per ogni ciclo su Java HashMap
- 10. Java HashMap elementi duplicati
- 11. String to HashMap JAVA
- 12. Come convertire stringa in HashMap in Java
- 13. Prendi le chiavi dal HashMap in Java
- 14. hashmap Java senza il valore?
- 15. Java: ottieni l'indice della chiave in HashMap?
- 16. Differenza tra HashMap e Map in Java ..?
- 17. Convertire HashMap.toString() su HashMap in Java
- 18. Java ordina HashMap dal valore
- 19. Eclipse avvertimento con Java HashMap
- 20. Java - Motivi per consentire null come chiave HashMap?
- 21. Java Singleton sincronizzazione per il multi-thread utilizzando HashMap
- 22. Loop Java HashMap come dizionario Python?
- 23. Archiviazione e recupero valore chiave Java HashMap
- 24. Stream Java - Ordina un elenco per una hashmap di liste
- 25. Java 8: inizializzazione HashMap con espressioni lambda
- 26. errore comportamento veloce di java HashMap
- 27. Java ArrayList e HashMap al volo
- 28. Java HashMap funziona ma contieneKey non
- 29. Java - Estendere HashMap - Oggetto vs. generici comportamento
- 30. Come per ogni hashmap?
Una nota a margine: se gli elementi sono immutabili in tutto il grafo di oggetti - non è necessario clonare loro. – Fortyrunner