Коллекции Set предназначены для хранения множества неповторяющихся объектов. Интерфейс Set предоставляет нам следующие методы :
HashSet, TreeSet и LinkedHashSet относятся к семейству Set. В множествах Set каждый элемент хранится только в одном экземпляре, а разные реализации Set используют разный порядок хранения элементов. В HashSet порядок элементов определяется по сложному алгоритму. Если порядок хранения для вас важен, используйте контейнер TreeSet, в котором объекты хранятся отсортированными по возрастанию в порядке сравнения или LinkedHashSet с хранением элементов в порядке добавления.
Множества часто используются для проверки принадлежности, чтобы вы могли легко проверить, принадлежить ли объект заданному множеству, поэтому на практике обычно выбирается реализация HashSet, оптимизированная для быстрого поиска.
Пример HashSet:
public void onClick(View v) {
HashSet<String> myHashSet = new HashSet<String>();
myHashSet.add("Россия");
myHashSet.add("Франция");
myHashSet.add("Гондурас");
myHashSet.add("Кот-Д'Ивуар"); // любимая страна всех котов
// Получим размер HashSet
textViewInfo.setText("Размер HashSet = " + myHashSet.size());
}
Пример TreeSet:
public void onClick(View v) {
Random random = new Random(30);
SortedSet<Integer> intset = new TreeSet<Integer>();
for(int i = 0; i < 1000; i++)
intset.add(random.nextInt(10));
textViewInfo.setText(intset.toString());
}
Вопрос 1.
Чем принципиально отличаются списки (Lists) от множеств (Sets)?
Вопрос 2.
В каких ситуациях стоит применять Set, а не List? Придумайте пример