Java - Ayuda para copiar un Map

   
Vista:
Imágen de perfil de Iraldo

Ayuda para copiar un Map

Publicado por Iraldo iraldomm@gmail.com (10 intervenciones) el 21/12/2015 19:10:34
Hola muy buenas a todos.

Llevo dándole vueltas a un problema y se me escapa la solución, a ver si alguien me podría ayudar. Gracias de antemano.

En primer lugar, tengo una variable tipo Map<k,v> en donde:
Key=String(nombre de la Zona),
V=Objeto tipo "Zona", definido tal que así: --------Map<String,Zona> Zonas=new TreeMap()--------.

Pues bien, el problema está cuando, a la hora de intentar crear otro Map, con las mismas Zonas, y con sus respectivos atributos idénticos, para poder jugar con la copia y mantener el original intacto, me sigue referenciando al objeto original, modificándome los valores originales cuando modifico los de la copia.

No se cómo hacer para crear una copia de Map sin que esta copia siga modificando el original.

Aquí está el código del método que copia el Map original en otro Map. El original es un atributo de la clase, y la copia es una variable local, definidas tal que así:
1
2
3
4
5
6
7
Map<String,Zona> Zonas=new TreeMap();
 
Map<String,Zona> copiaZonas=new TreeMap();
 
//Llamo a la función de abajo:
 
copiarMap(Zonas, copiaZonas);

MÉTODO DE COPIA DEL MAP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void copiarMap(Map<String,Zona> original,Map<String,Zona> copia){
 
        Iterator it=original.keySet().iterator();
 
        while(it.hasNext()) {
 
            String key=(String) it.next();
 
            int[]X=original.get(key).getXvector();
            int[]Y=original.get(key).getYvector();
 
            int npuntos=original.get(key).getNpuntos();
 
 
            copia.put(key,new Zona(X,Y,npuntos,key));
 
 
        }
    }

Espero no haberme liado mucho.

Gracias y saludos.

Iraldo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda para copiar un Map

Publicado por Andrés (231 intervenciones) el 22/12/2015 03:38:22
Prueba con:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void copiarMap(Map<String,Zona> original,Map<String,Zona> copia) {
 
	    Iterator<String> it=original.keySet().iterator();
 
		int[] X = null;
		int[] Y = null;
		String key = null;
 
	    while(it.hasNext()) {
 
	    	key = new String(it.next());
 
	        X=Arrays.copyOf(original.get(key).getXvector(), original.get(key).getXvector().length);
	        Y=Arrays.copyOf(original.get(key).getXvector(), original.get(key).getYvector().length);
 
	        int npuntos=original.get(key).getNpuntos();
 
	        copia.put(key,new Zona(X,Y,npuntos,key));
 
 
	    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Iraldo

Ayuda para copiar un Map

Publicado por Iraldo (10 intervenciones) el 22/12/2015 10:19:23
Muchísimas gracias Andrés.

Lo acabo de probar y parece que funciona.

Saludos.

Iraldo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar