Foros del Web » Programación para mayores de 30 ;) » Java »

ArrayList se me da la vuelta

Estas en el tema de ArrayList se me da la vuelta en el foro de Java en Foros del Web. Buenas! Tengo un problema con una lista; como dice el título se me da la vuelta. La cosa está tal que así: Código: public void ...
  #1 (permalink)  
Antiguo 25/09/2012, 05:48
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
ArrayList se me da la vuelta

Buenas!

Tengo un problema con una lista; como dice el título se me da la vuelta.

La cosa está tal que así:

Código:
        public void out(){
		Iterator<Activity> it = this.getA().iterator();
		Utilities          ut = new Utilities();

		while(it.hasNext()){
			Activity       a  = (Activity)it.next();
			Iterator<User> us = a.getAssistants().iterator();
			
			while(us.hasNext())
				this.makeMail((User)us.next(), a);
			
			ut.setAdvised(a.getId());
		}
	}

        private void makeMail(User u,
			              Activity a){		
		List<User>     assA = a.getAssistants();
		
		Collections.sort(assA, new UserComparator(u.getFriends()));
		Collections.reverse(assA);

                //...
        }
Sin embargo, cuando llamo desde out a makeMail, al volver la lista me queda girada...

¿Alguien tiene alguna idea de lo que puede ser?

Grácias.
  #2 (permalink)  
Antiguo 25/09/2012, 13:27
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: ArrayList se me da la vuelta

Es normal que se te quede dada la vuelta si realizas una llamada al método Collections.reverse.

Tienes que tener en cuenta que este método realiza el proceso de dar la vuelta sobre el propio array, no devolviendo una copia de el.

Un saludo.
  #3 (permalink)  
Antiguo 25/09/2012, 23:48
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: ArrayList se me da la vuelta

Buenas, alexg88.

Primero, gracias por contestar.
Segundo; sé que el Collections.reverse actúa sobre el propio ArrayList, es por eso que creo una copia local del array:

Código:
assA = a.getAssistants();
El problema es que al terminar el método, en Out, el array "a.getAssistants()" ha cambiado, cuando solo debería cambiar "assA"... o eso creo...

De todas maneras, ahora que reviso el primer post me he dado cuenta que no había escrito el verdadero problema...

Saludos!
  #4 (permalink)  
Antiguo 26/09/2012, 00:48
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: ArrayList se me da la vuelta

Dentro del método getAssistants() ... ¿cómo creas la copia que devuelves?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 26/09/2012, 05:58
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: ArrayList se me da la vuelta

No devuelvo copia en a.getAssistants(); me refiero a que dentro del método hago una copia local.

Es decir, al método makeMail llega un objeto del tipo Activity (que tiene el método getAssistants()). Dentro de makeMail creo un array temporal (assA), que es el que ordeno.

Cuando acaba el método makeMail, retorna a out, que ha llamado a makeMail con el objeto Activity.

Pues bien, en out, al final el array de assistants de "a" se me queda cambiado, cuando solo le he hecho el "Collections.sort()" a un array auxiliar (assA).

@chuidiang, probaré a hacer un método que devuelva una copia del array y no el array en si, a ver si se arregla; gracias.

Saludos

Etiquetas: arraylist
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:52.