Social

viernes, 24 de mayo de 2013

Java: Eliminar elementos repetidos en ArrayList

Muchas veces nos es necesario quietar cualquier elemento que este duplicado dentro de un ArrayList<T> de Java. Para realizar tal acción existen colecciones del tipo HashSet<T> que nos permiten agregar todos los elementos del array y nos devuelve una colección de objetos sin duplicados.

Para realizar tal acción simplemente hay que agregar la colección del ArrayList<T> al HashSet<T> y luego regresar la información. Se puede observar en el siguiente código:


En el código anterior hay dos casos, el primero usa un HashSet<T> el cual elimina los duplicados de un array de String pero nos lo devuelve sin ningún orden en particular. En el segundo caso se usa un LinkedHashSet<T> el cual elimina los repetidos de un ArrayList de objetos Datos y mantiene el orden con el que venía. Si se desea que la respuesta este ordenada LinkedHashSet es la solución. 

Es importante que al trabajar con objetos con varios atributos como lo es Datos sobrescribamos sus métodos equals() y hashCode(). Pueden leer sobre esto en el siguiente post.

Al final la respuesta nos quedaría asi:

Cadena2
Cadena3
Cadena4
Cadena1
Info: 1-Nombre1-Empresa1
Info: 2-Nombre2-Empresa2
Info: 3-Nombre3-Empresa3
Info: 4-Nombre4-Empresa4
Info: 5-Nombre5-Empresa5
Info: 1-Nombre2-Empresa2

13 comentarios :

  1. exelente, me ayudo mucho y muy simple gracias !!!

    ResponderEliminar
  2. Si en vez de eliminar los datos repetidos, los tendría que reemplazar por un valor negativo o cualquier otro valor, ejemplo: "-1".

    ResponderEliminar
    Respuestas
    1. Te recomiendo que realices otro List, recorras el primero obteniendo sus valores, operándolos como corresponda e insertando los nuevos valores en el nuevo List.

      Eliminar
    2. La respuesta esta excelente. Pero no busco comparar dos array o crear otro, sino mas bien recorrer un solo arreglo y si dentro de el se encuentra valores duplicados, reemplazarlos por un -1.

      La función seria con un "if" pero esa es la parte donde no sabría comparar una lista y agregarles valor. Pero muchas gracias mi hermano.

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. esto debe de servir con puros String tambien?, que no me funciona con puras cadenas

    ResponderEliminar
  5. Muy buen aporte, muchas gracias me resolviste un gran problema

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. Hola, y si quisiera recorrerlos pero eliminando las letras repetidas en una cadena ?. Muchas Gracias

    ResponderEliminar