Я согласен с sepp2k, но есть некоторые другие детали, которые могут иметь значение:
new HashSet<Foo>(myList);
даст вам несортированный набор, в котором нет дубликатов. В этом случае дублирование идентифицируется с помощью метода .equals () на ваших объектах. Это делается в сочетании с методом .hashCode (). (Подробнее о равенстве смотрите здесь )
Альтернатива, которая дает отсортированный набор:
new TreeSet<Foo>(myList);
Это работает, если Foo реализует Comparable. Если этого не произойдет, вы можете использовать компаратор:
Set<Foo> lSet = new TreeSet<Foo>(someComparator);
lSet.addAll(myList);
Это зависит либо от CompareTo () (из сопоставимого интерфейса), либо от Compare () (от компаратора) для обеспечения уникальности. Итак, если вы просто заботитесь об уникальности, используйте HashSet. Если вы после сортировки, то рассмотрите TreeSet. (Помните: оптимизируйте позже!) Если эффективность времени имеет значение, используйте HashSet, если эффективность пространства имеет значение, посмотрите на TreeSet. Обратите внимание, что более эффективные реализации Set и Map доступны через Trove (и другие места).