Содержание
Set - следующая коллекция, которая будет рассмотрена. В статье пойдет речь об интерфейсе Set, а также о классах HashSet, LinkedHashSet и TreeSet.
Set - коллекция, которая не может содержать повторяющихся одинаковых элементов, иногда называемая множеством. Более формально, коллекция не может содержать пары элементов e1 и e2 таких, что выполняется условие e1.equals(e2) и не более одного null элемента.
На Рис.1 приведена иерархия классов Set.
Рис 1. Иерархия Set во фреймворке Collections
Как видно из Рис.1, интерфейс Set, унаследовавшись от Collection, не содержит никаких новых методов.
Платформа Java содержит три универсальных реализации коллекции Set: HashSet, TreeSet и LinkedHashSet.
HashSet хранит элементы в хеш-таблице, из-за чего имеет наиболее высокую производительность, но не гарантирует порядок элементов;
TreeSet хранит элементы в отсортированном порядке, из-за чего работает существенно медленнее, чем HashSet;
LinkedHashSet отличается от HashSet тем, что хранит элементы в порядке их вставки в коллекцию. Эта коллекция лишь немного медленнее HashSet.
Многие могут задуматься, что при попытке добавлении существующего элемента в LinkedHashSet существует 2 варианта развития событий. Первый вариант - существующий элемент удаляется из коллекции, а в конец коллекции добавляется (этот же) элемент. Второй вариант - коллекция не изменяется и все элементы остаются на своих местах. В LinkedHashSet реализован второй вариант. Это демонстрирует следующий пример:
Set<String> stringSet = new LinkedHashSet<String>();
stringSet.add("2");
stringSet.add("1");
stringSet.add("2");
stringSet.add("4");
stringSet.add("3");
stringSet.add("5");
for( String entry : stringSet ){
System.out.print( entry );
}
// Output: 21435
Ниже приведено несколько положений, о которых необходимо помнить:
< | Коллекции (Collections) в Java. List | Коллекции (Collections) в Java. Queue | > |