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

funcion remove ArrayList

Estas en el tema de funcion remove ArrayList en el foro de Java en Foros del Web. Hola a todos, tengo un problema que es muy raro: Resumen rápido: Al eliminar filas de una lista si coincide con un literal, me lo ...
  #1 (permalink)  
Antiguo 12/01/2012, 12:15
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 8 meses
Puntos: 78
funcion remove ArrayList

Hola a todos,
tengo un problema que es muy raro:

Resumen rápido: Al eliminar filas de una lista si coincide con un literal, me lo elimina "uno si y otro no, así hasta el final"


Tengo un ArrayList<Objeto1> con varias filas ya.

Pero al hacer lo siguiente:

Código Java:
Ver original
  1. for (int i=0;i<list.size();i++){ //inicio el bucle
  2. Objeto1 obj = (Objeto1)list.get(i); //Extraigo los objetos
  3. if (obj.getName().equals("Pepe"){ //Los comparo
  4. list.remove(i); //Si coincide, elimino la fila
  5. }
  6. }

Suponiendo que todas las filas tengan como nombre "Pepe" me elimina una si y otra no hasta el final.

¿Como puedo eliminar todas las filas que tengan ese nombre?

Gracias a todos y un saludo.
  #2 (permalink)  
Antiguo 12/01/2012, 12:44
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 14 años
Puntos: 24
Respuesta: funcion remove ArrayList

Pues el error que cometes está claro.
Te lo explico. Supongamos que tienes la lista:

Código Java:
Ver original
  1. List<String> listaNombres = new ArrayList<String>();
  2. listaNombres.add("Pepe");
  3. listaNombres.add("Pepe");
  4. listaNombres.add("Juan");
  5. listaNombres.add("Pepe");
  6. listaNombres.add("Pepe");
  7. listaNombres.add("Roberto");

Para la primera iteración de tu bucle, i vale 0. Se cumple la condicional, y procedes a remover al Pepe que está en el índice 0 de la lista. Como ya no está el Pepe del índice cero, entonces el Pepe que estaba en el índice 1 pasó a estar en el índice 0. De la misma manera, Juan estaba en el índice 2, pero ahora estará en el índice 1, y así sucesivamente con los demás integrantes de la lista.
Ahora para la segunda iteración de tu bucle, i vale 1. ¡Hey, pero hay un Pepe en la posición cero! Para tu mala suerte, el bucle ya pasó el índice cero. ¿Qué hacer? Pues sencillo, cada vez que elimines un elemento de tu lista haz que tu algoritmo mantenga el valor de i.


Código Java:
Ver original
  1. for (int i=0;i<listaNombres.size();i++){
  2.     if (listaNombres.get(i).equals("Pepe")){
  3.         listaNombres.remove(i);
  4.         i--;
  5.     }
  6. }
  #3 (permalink)  
Antiguo 13/01/2012, 00:05
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 6 meses
Puntos: 69
Respuesta: funcion remove ArrayList

Ho puedes dejar el aumento solo en el bloque asi:

Código PHP:
for (int i=0i<listaNombres.size(); ){
    if (
listaNombres.get(i).equals("Pepe")){
        
listaNombres.remove(i);
    } else 
i++;

en teoría también funciona...
  #4 (permalink)  
Antiguo 13/01/2012, 02:34
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 8 meses
Puntos: 78
Respuesta: funcion remove ArrayList

Hola farfamorA,
tu explicación más clara imposible. Muchas gracias por aclararme este tema!

Gracias a ambos!!

Un saludo!
  #5 (permalink)  
Antiguo 13/01/2012, 11:47
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 14 años
Puntos: 24
Respuesta: funcion remove ArrayList

No hay de qué, estamos para ayudarnos. Saludos, pueden cerrar el tema.

Etiquetas: arraylist, funcion, remove
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 11:42.