Eliminar duplicados en List

Me ha surgido el problema de tener que eliminar de una lista todos los elementos repetidos y la manera más elegante que he encontrado para hacerlo ha sido apoyarme en una estructura hermana de List, me refiero a Set. List, Set y Queue implementan la interface Collection. Casi todos los subtipos de Collection tienen un constructor que toma como argumento otro objeto Collection, a partir del cual puede rellenar el nuevo contenedor.

Taxonomía completa de los contenedores

Entonces partimos de una lista con objetos repetidos y quiero quedarme con una lista que no tenga ningún objeto repetido. Para esto utilizaré el contenedor Set (interface) ya que cada elemento que se añada al conjunto debe ser diferente; en caso contrario, el objeto Set no añadirá el elemento duplicado. Los elementos añadidos a un conjunto deben al  menos definir equals() con el fin de establecer la unicidad de los objetos. De las implementaciones de Set elegiré LinkedHashSet, ya que mantiene internamente el orden en que se añaden los elementos y tiene la misma velocidad de búsqueda que HashSet.

public List eliminarDuplicados(List list){
    List listSinDuplicados = new ArrayList();
    Set set = new LinkedHashSet(list);
    listSinDuplicados.addAll(set);
    return listSinDuplicados;
}

Con este simple método ya puedo eliminar todos los duplicados de cualquier contenedor List.

Anuncios

One response to “Eliminar duplicados en List

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s