Зміст
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 | > |