Ejemplo

List list = new ArrayList();
...

if (!list.contains(someObject)) {
...
list.add(someObject);
...
}

Solución
En el ejemplo dado, el método "contains" de la lista ejecutará una búsqueda lineal, lo que puede ser costoso si la lista es grande. Si se modifica por un conjunto, no será necesario llamar a contains ya que el conjunto garantiza la exclusividad. Cambio sugerido:


Set set = new HashSet();
...
set.add(someObject);
...


Si el orden de inserción es importante, utilice LinkHashSet en lugar de HashSet. Cambio sugerido:


Set set = new LinkedHashSet();
...
set.add(someObject);
...