Muchas veces se nos presentan situaciones en que no debemos permitir elementos duplicados en un ArrayList. Muchas son las opciones que tenemos disponible, por ejemplo, si queremos determinar si un elemento está duplicado en nuestro ArrayList, podemos construir nuestro propio método

1
2
3
4
5
6
7
8
9
10
public boolean isDuplicate(ArrayList<String> lista){

for(int i=0;i<lista.size()-1;i++){
for(int j=i+1;j<lista.size();j++){
if(lista.get(i)==lista.get(j))
return true;
}
}
return false;
}

 

Si sólo deseamos que no se incluyan elementos que estén duplicados en nuestro ArrayList, nuevamente desarrollamos un método que recubra el método add() del array.

1
2
3
4
5
public void addUnique(ArrayList<String> lista, String elemento){

if(!lista.contains(elemento))
lista.add(elemento);
}

 

Si ya poseemos el ArrayList con los valores (duplicados inclusive) y queremos eliminar los repetidos, utilizamos una ayuda de otras clases, nos referimos a la Clase HashSet. Ésta clase implementa la interface Set, que entre sus muchas ventajas (no entraremos en detalles) no nos permite valores duplicados, con la única salvedad que perderemos el orden en que fueron inicialmente añadidos al ArrayList.

1
2
3
4
5
6
7
8
public ArrayList<String> uniqueSinOrdenar(ArrayList<String> lista) {

HashSet<String> hs = new HashSet<String>();
hs.addAll(lista);
lista.clear();
lista.addAll(hs);
return lista;
}

 

Por útlimo si necesitamos preservar el orden podemos ayudarnos con otra clase, LinkedHashSet.

1
2
3
4
5
6
7
public ArrayList<String> uniqueOrdenado(ArrayList<String> lista){

Set<String> s = new LinkedHashSet<String>(lista);
lista.clear();
lista.addAll(s);
return lista;
}

 

Descarga el código fuente

(Visited 499 times, 2 visits today)