456 votos

¿Cómo puedo eliminar los elementos repetidos de ArrayList?

Tengo un ArrayList de Strings y quiero quitarle las cadenas repetidas. ¿Cómo puedo hacerlo?

931voto

jonathan-stafford Puntos 2785

Si no quiere que haya duplicados en una colección, debería considerar por qué está usando una colección que permite duplicados. La forma más sencilla de eliminar los elementos repetidos es añadir el contenido a un Conjunto (que no permitirá duplicados) y luego volver a añadir el Conjunto a la Colección ArrayList :

ArrayList al = new ArrayList();
// add elements to al, including duplicates
HashSet hs = new HashSet();
hs.addAll(al);
al.clear();
al.addAll(hs);

Por supuesto, esto destruye el orden de los elementos en el ArrayList.

285voto

abahgat Puntos 6479

Aunque la conversión de la ArrayList a un HashSet elimina efectivamente los duplicados, si necesita preservar el orden de inserción, le sugiero que utilice esta variante

// list is some List of Strings
Set<String> s = new LinkedHashSet<String>(list);

Entonces, si necesitas recuperar un List se puede utilizar de nuevo el constructor de conversión.

52voto

Bno Puntos 5688

Si no quiere duplicados, utilice un Establecer en lugar de un List . Para convertir un List a un Set puede utilizar el siguiente código:

// list is some List of Strings
Set<String> s = new HashSet<String>(list);

Si es realmente necesario se puede utilizar la misma construcción para convertir un Set de nuevo en un List .

27voto

stbn Puntos 151

Esta es una forma que no afecta a la ordenación de tu lista:

ArrayList l1 = new ArrayList();
ArrayList l2 = new ArrayList();

Iterator iterator = l1.iterator();

        while (iterator.hasNext())
        {
            YourClass o = (YourClass) iterador.next();
            if(!l2.contains(o)) l2.add(o);
        }

l1 es la lista original, y l2 es la lista sin elementos repetidos (Asegúrese de que YourClass tiene el método equals de acuerdo con lo que quiere representar la igualdad)

22voto

Errandir Puntos 1536

También hay ImmutableSet de guava-bibliotecas como opción:

ImmutableSet.copyOf(list);

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X