У овом упутству ћемо научити о класи Јава ХасхСет. Помоћу примера ћемо научити различите методе и операције хеш сетова.
HashSet
Класа оквиру Јава Колекције даје функционалност структуре података хеш табеле.
Примењује интерфејс Сет.
Креирање ХасхСет-а
Да бисмо креирали хеш скуп, прво морамо да увозимо java.util.HashSet
пакет.
Једном када увозимо пакет, ево како можемо да креирамо скупове хеша у Јави.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Овде смо креирали хеш скуп са именом numbers
.
Напомена, део нови HashSet(8, 0.75)
. Овде је први параметар капацитет , а други параметар лоадФацтор .
- капацитет - Капацитет овог хеш-скупа је 8. Значи, може да ускладишти 8 елемената.
- лоадФацтор - Фактор оптерећења овог хеш-скупа је 0,6. То значи, кад год се наш хеш сет попуни за 60%, елементи се премештају у нову хеш таблицу двоструке величине оригиналне хеш таблице.
Задани капацитет и фактор оптерећења
Могуће је направити хеш табелу без дефинисања њеног капацитета и фактора оптерећења. На пример,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Подразумевано,
- капацитет скупа хеша биће 16
- фактор оптерећења износиће 0,75
Методе ХасхСет-а
HashSet
Класа обезбеђује различите методе које омогућавају да обављају различите операције на снимању.
Уметните елементе у ХасхСет
add()
- убацује наведени елемент у скупaddAll()
- у скуп убацује све елементе наведене колекције
На пример,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) )
Оутпут
ХасхСет: (2, 4, 6) Нови ХасхСет: (2, 4, 5, 6)
Приступите елементима ХасхСет
Да бисмо приступили елементима хеш скупа, можемо користити iterator()
методу. Да бисмо користили овај метод, морамо увозити java.util.Iterator
пакет. На пример,
import java.util.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Оутпут
ХасхСет: (2, 5, 6) ХасхСет користећи Итератор: 2, 5, 6,
Уклоните елементе
remove()
- уклања наведени елемент из скупаremoveAll()
- уклања све елементе из сета
На пример,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) )
Оутпут
ХасхСет: (2, 5, 6) Да ли је уклоњено 5? тачно Да ли су уклоњени сви елементи? истина
Сет Оператионс
Различите методе HashSet
класе такође се могу користити за извођење различитих задатих операција.
Унија комплета
Да бисмо извршили унију између два скупа, можемо користити addAll()
методу. На пример,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) )
Оутпут
ХасхСет1: (2, 4) ХасхСет2: (1, 3) Унија је: (1, 2, 3, 4)
Пресек скупова
Да бисмо извршили пресек два скупа, можемо користити retainAll()
методу. На пример
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Оутпут
ХасхСет1: (2, 3) ХасхСет2: (2, 4) Пресек је: (2)
Разлика скупова
Да бисмо израчунали разлику између два скупа, можемо користити removeAll()
методу. На пример,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Оутпут
ХасхСет1: (2, 3, 5) ХасхСет2: (1, 3, 5) Разлика: (2)
Подскуп
Да бисмо проверили да ли је скуп подскуп другог скупа или не, можемо користити containsAll()
методу. На пример,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) )
Оутпут
ХасхСет1: (1, 2, 3, 4) ХасхСет2: (2, 3) Да ли је ХасхСет2 подскуп ХасхСет1? истина
Остале методе ХасхСет-а
Метод | Опис |
---|---|
clone() | Ствара копију HashSet |
contains() | Претражује HashSet наведени елемент и враћа логички резултат |
isEmpty() | Проверава да ли HashSet је празно |
size() | Враћа величину HashSet |
clear() | Уклања све елементе из HashSet |
Да бисте сазнали више о методама ХасхСет, посетите Јава ХасхСет (званична Јава документација).
Зашто ХасхСет?
У Јави HashSet
се обично користи ако елементима морамо да приступамо насумично. То је зато што се елементима у хеш табели приступа помоћу хеш кодова.
Хасхцоде елемента је јединствени идентитет који помаже у идентификацији елемента у хасх таблици.
HashSet
не може садржати дупликате елемената. Дакле, сваки елемент хасх скупа има јединствени хасхцоде.
Напомена: ХасхСет није синхронизован. То је ако више нити истовремено приступа хеш скупу и једна од нити модификује хеш скуп. Тада се мора синхронизовати споља.