¿Hay utilidad de Java que hace clone()
método para HashMap
dicha copia que se hace de los elementos del mapa no sólo el objeto de mapa (como el clone()
en HashMap
clase)?utilidad clon de HashMap en Java
Respuesta
¿Qué pasa con otros objetos a los que se hace referencia en los elementos? ¿Qué tan profundo quieres tu clon?
Si los elementos del mapa no tienen ninguna referencia profundas y/o todo es Serializable
, puede serializar el mapa a través de ObjectOutputStream
en un ByteArrayOutputStream
y luego deserializar inmediato.
La única otra alternativa es hacerlo manualmente.
Una vez que conozca su clave/valor par son elementos cloneable:
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: ¿Qué sucede si e.getKey() o e.getValue() es otro HashMap() u otro objeto que también requiere un clon de copia profunda? –
bueno ... esta es una simple rutina de clics de hashmap. En realidad, estoy asumiendo que los objetos son clonables, por lo que las profundidades serán resueltas por los objetos clave/valor mismos. Para hacer una clonación profunda de un hashmap sin asumir serializables/clonables, creo que la reflexión sería una forma (aún no estoy seguro si es cierto). – Oso
Tome una mirada en el método deepClone en http://www.devdaily.com/java/jwarehouse/netbeans-src/db/libsrc/org/netbeans/lib/ddl/impl/SpecificationFactory.java.shtml. No es genérico, pero incluye varios tipos incorporados (incluido HashMap, recursivamente), y obviamente puede ampliarse.
La cuestión de forma clon profundo recomendación utilidad es similar a éste, y tiene an answer that may be helpful to you.
Para resumir, recomiendan usar the Cloning library de Google Code. Por experiencia personal, copia en profundidad HashMap
s. Incluso puede clonar cosas que no son Cloneable
.
A menudo la copia debe ser profunda. Aquí hay un ejemplo de cómo "copia en profundidad"
Map<Integer, ArrayList<Integer>>
código:
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. clon profundo recomendación utilidad
- 2. impresión HashMap En Java
- 3. Java HashMap o IdentityHashMap
- 4. Java HashMap vs JSONObject
- 5. Java XStream con HashMap
- 6. Java HashMap elementos duplicados
- 7. Cadena para HashMap JAVA
- 8. java HashMap iteración clave
- 9. comportamiento fallido de java HashMap
- 10. Actualización de Java HashMap clave
- 11. Obtener claves de HashMap en Java
- 12. Java interruptor codificado vs HashMap
- 13. Java HashMap Quitar clave/valor
- 14. Eclipse con Java Advertencia HashMap
- 15. Java clase HashMap por valor
- 16. Convertir HashMap.toString() a HashMap en Java
- 17. Diferencia entre HashMap y Map en Java ...?
- 18. Almacenamiento y recuperación del valor de la clave Java HashMap
- 19. Asignación de Hashmap a Hashmap
- 20. Convención de nomenclatura para clases de utilidad en Java
- 21. Alcance de la utilidad de la interfaz en java
- 22. Utilidad de JNI
- 23. HashMap basado en disco
- 24. clon node en arrastre
- 25. Rellenar un hashmap con valores predefinidos (java)
- 26. Java ArrayList y HashMap sobre la marcha
- 27. Loop Java HashMap like Python Dictionary?
- 28. Java - Ampliación HashMap - Objeto vs comportamiento genéricos
- 29. Java HashMap get funciona pero containsKey no
- 30. n-gra modeling with java hashmap
Una nota al margen: si sus elementos son inmutables a través del gráfico de objetos - que no es necesario para clonar ellos. – Fortyrunner