hashset java tutorial with programming examples
Цей підручник пояснить, що таке HashSet у Java, методи HashSet, як реалізувати та переглядати його та інші суміжні концепції за допомогою прикладів програмування:
HashSet - це колекція, яка зберігає об'єкти. HashSet в Java реалізований за допомогою класу «HashSet» пакета java.util.
Цей клас реалізує набір інтерфейсів. Він використовує HashTable, який є екземпляром HashMap для зберігання.
=> Подивіться тут посібник для початківців Java.
Що ви дізнаєтесь:
Java HashSet
Деякі характеристики HashSet наведені нижче:
- Реалізує інтерфейс Set, який має HashTable як внутрішню структуру. HashTable, у свою чергу, є екземпляром HashMap.
- Він не зберігає порядок елементів. Елементи зберігаються у довільному порядку.
- HashSet не дозволяє повторювані значення.
- Реалізує інтерфейс Cloneable та Serializable, крім інтерфейсу Set.
- Ми можемо мати нульові значення в HashSet.
Ієрархія класу HashSet
Ієрархія класу HashSet наведена нижче:
Як показано на малюнку вище, клас HashSet розширює клас AbstractSet, який, у свою чергу, реалізує інтерфейс Set. Набір інтерфейсів успадковує інтерфейс Collection, який, у свою чергу, розширює інтерфейс Iterable.
Випуск Java 8 представив новий метод «Сплітератор» у HashSet, який створює швидко спрацьовуючий спитератор, який виконує пізнє прив’язування до елементів HashSet.
Загальне оголошення класу HashSet:
відкритий клас HashSet розширює набір абстрактних наборів,
Клонується, серіалізується
Імпортувати HashSet
Ми можемо включити функціональність HashSet до програми за допомогою оператора імпорту, як показано нижче:
імпортувати java.util.HashSet;
або
імпортувати java.util. *;
Оголосіть HashSet в Java
Ми можемо створити об'єкт HashSet на Java, як показано нижче:
HashSet h = новий HashSet ();
Клас HashSet надає такі конструктори для створення об’єктів.
Прототип конструктора | Опис | |
---|---|---|
видалити | Логічне видалення (Об'єкт o) | Видаляє даний елемент o із HashSet, якщо він є частиною HashSet. |
HashSet () | Конструктор за замовчуванням для HashSet | |
HashSet (внутрішня ємність) | Побудовує об'єкт HashSet із заданою 'ємністю'. | |
HashSet (внутрішня ємність, поплавковий навантажувальний фактор) | Конструює об'єкт HashSet із заданими 'ємністю' та 'loadFactor'. | |
HashSet (Колекція c) | Побудувати об’єкт HashSet із заданої колекції. |
Як показано у наведеній вище таблиці, крім конструктора за замовчуванням, цей клас також надає конструктори, які беруть в якості аргументів ємність та loadfactor та іншу колекцію. Ми можемо створювати об'єкти цього класу, використовуючи будь-який з цих конструкторів.
Ініціалізуйте HashSet
Наступний код Java показує оголошення та ініціалізацію об'єкта класу HashSet. У цій програмі ми створюємо об’єкт класу HashSet із ArrayList. Спочатку ми створюємо та ініціалізуємо ArrayList, а потім використовуємо цей ArrayList для створення та ініціалізації об'єкта HashSet.
import java.util.*; class Main{ public static void main(String args()){ //declare and initialize ArrayList ArrayList<String> myList=new ArrayList<String>(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); //Create a HashSet and provide ArrayList in its constructor HashSet<String> mySet=new HashSet(myList); mySet.add('Yellow'); //print the HashSet System.out.println('The HashSet contents:'); Iterator<String> i=mySet.iterator(); while(i.hasNext()) { System.out.print(i.next() + ' '); } } }
Вихід:
Як HashSet працює внутрішньо в Java?
Внутрішньо це реалізовано за допомогою HashTable. HashTable є екземпляром HashMap. Але HashMap - це сукупність пар ключ-значення. Тож як ми зберігаємо HashSet у HashMap?
Значення об’єкта HashSet - це ключі до HashMap.
Приклад Java HashSet
Подивимось докладний приклад HashSet на Java.
import java.util.*; class Main{ public static void main(String args()){ //Create a HashSet and add elements to it HashSet<String> mySet=new HashSet<String>(); mySet.add('Blue'); mySet.add('Green'); mySet.add('Blue'); mySet.add('Green'); mySet.add('Red'); mySet.add('Brown'); mySet.add('Yellow'); //Iterate through the HashSet and print its elements System.out.println('HashSet contents:'); Iterator<String> itr=mySet.iterator(); while(itr.hasNext()){ System.out.print(itr.next() + ' '); } } }
Вихід:
Тут ми використовуємо конструктор за замовчуванням для створення об’єкта HashSet. Потім за допомогою методу add ми додаємо елементи (кольори) до HashSet. Далі ми використовуємо ітератор для обходу HashSet та друку вмісту.
HashSet Iterator
У Java HashSet можна обходити або повторювати двома способами, як обговорюється нижче.
Без використання Iterator
Тут ми не визначаємо ітератор у HashSet. Натомість ми використовуємо цикл forEach. Наступна програма показує обхід HashSet за допомогою циклу forEach.
import java.util.HashSet; import java.util.Set; class Main{ public static void main(String() args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use foreach loop to iterate through the HashSet System.out.println('HashSet contents:'); for (String city : cities_HashSet) { System.out.print(city + ' '); } } }
Вихід:
Використання Iterator
Наступним підходом ітерації є використання ітератора. Тут ми визначаємо ітератор для класу HashSet, а потім проходимо через нього.
Наступна програма демонструє цей підхід.
import java.util.HashSet; import java.util.Set; import java.util.Iterator; class Main{ public static void main(String() args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use iterator to iterate through the HashSet System.out.println('HashSet contents using Iterator:'); Iterator<String> iter = cities_HashSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Вихід:
Методи / API HashSet
У наступній таблиці показані методи, надані класом HashSet. Ми надали прототип та опис кожного методу. Як видно, у нас є методи для основних операцій, таких як додавання, видалення, розмір тощо, а також для інших методів перевірки вмісту, порожнечі, ітератора, сплайтера тощо.
Метод | Метод-прототип | Опис |
---|---|---|
додати | Логічне додавання (E e) | Додає даний елемент e до HashSet, якщо він ще не присутній. |
ясно | Порожнеча очищена () | Очищує або видаляє всі елементи з HashSet |
клон | Клон об'єкта () | Він використовується для повернення дрібної копії цього екземпляра HashSet: самі елементи не клоновані. |
містить | Логічне містить (Об'єкт o) | Перевіряє, чи містить HashSet заданий об'єкт o і повертає true, якщо так. |
пусто | Логічний isEmpty () | Перевіряє, чи HashSet порожній. Повертає true, якщо так. |
ітератор | Ітератор ітератора () | Повертає ітератор, який використовується для обходу HashSet. |
розмір | Внутрішній розмір () | Повертає розмір або кількість елементів, присутніх у HashSet. |
спліттер | Сплітератор Сплітератор () | Повертає швидко спрацьовуючий і пізньозв’язуючий сплітератор для обходу HashSet. Цей метод був введений в Java 8. |
Ми описали методи, надані класом HashSet, а тепер давайте реалізуємо приклад, який демонструє основні методи класу.
Наведена нижче програма Java демонструє методи цього класу.
import java.util.*; class Main{ public static void main(String args()){ //create a HashSet and initialize it HashSet<String> colors_set=new HashSet<String>(); colors_set.add('Red'); colors_set.add('Green'); colors_set.add('Blue'); colors_set.add('Cyan'); System.out.println('Initial HashSet: '+colors_set); //remove() method => remove specified element colors_set.remove('Red'); System.out.println('
HashSet after remove(Red): '+colors_set); //declare and initialize another list HashSet<String> colors_hash=new HashSet<String>(); colors_hash.add('Yellow'); colors_hash.add('Magenta'); //addAll() method => add another HashSet to existing colors_set.addAll(colors_hash); System.out.println('
HashSet after add(colors_hash): '+colors_set); //removeAll() method => remove all elements specified in the argument colors_set.removeAll(colors_hash); System.out.println('
HashSet after removeAll(colors_hash) method: '+colors_set); //removeIf() => remove if given condition is fulfilled colors_set.removeIf(str->str.contains('Green')); System.out.println('
HashSet after removeIf(contains(Green)) method: '+colors_set); //clear() => delete all elements from the HashSet colors_set.clear(); System.out.println('
HashSet after clear() method: '+colors_set); } }
Вихід:
Перетворити HashSet на масив
Ми можемо використовувати метод toArray () HashSet, щоб перетворити даний HashSet у масив. Зверніть увагу, що тип даних та розмір масиву повинні збігатися з даними HashSet.
Наступна програма Java показує це перетворення.
import java.util.HashSet; class Main{ public static void main(String() args) { // Create a HashSet & inintialize it HashSet<String> num_HashSet = new HashSet<String>(); num_HashSet.add('One'); num_HashSet.add('Two'); num_HashSet.add('Three'); num_HashSet.add('Four'); // Print HashSet contents System.out.println('HashSet contents: '+ num_HashSet); // Declare an array with size = HashSet size String() numArray = new String(num_HashSet.size()); //use toArray method to convert HashSet to an array num_HashSet.toArray(numArray); // Print Array System.out.println('Array from HashSet: '); for(String val : numArray){ System.out.print(val + ' '); } } }
Вихід:
Сортувати HashSet
Ми можемо сортувати HashSet на Java. Елементи HashSet не сортуються спочатку, оскільки він не підтримує порядок елементів. Ми можемо дотримуватися двох підходів до сортування HashSet на Java.
Використання методу Collections.sort ()
При такому підході ми перетворюємо HashSet у список. Потім ми використовуємо метод Collections.sort () для сортування списку. Потім цей список друкується.
import java.util.*; public class Main { public static void main(String args()) { // Create a HashSet & initialize it HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet: ' + cities_HashSet); // Convert HashSet to ArrayList List<String> cities_list = new ArrayList<String>(cities_HashSet); // Use Collections.sort () method to sort the list Collections.sort(cities_list); // Print the Sorted ArrayList (HashSet) System.out.println('Sorted HashSet:'+ cities_list); } }
Вихід:
основні запитання для інтерв’ю Java для тестувачів селену
Перетворюючи HashSet на TreeSet
За допомогою цього підходу ми перетворюємо HashSet на TreeSet. TreeSet підтримує порядок елементів. Отже, коли HashSet покрито TreeSet, елементи впорядковуються.
Наступна програма Java показує це перетворення, тим самим сортуючи HashSet.
import java.util.*; public class Main { public static void main(String args()) { // Create and initialize a HashSet HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet:'+ cities_HashSet); // Sort HashSet using TreeSet TreeSet<String> treeSet = new TreeSet<String>(cities_HashSet); // Print the sorted HashSet System.out.println('HashSet sorted using using TreeSet:' + treeSet); } }
Вихід:
Давайте зараз обговоримо деякі відмінності між HashSet та HashMap. Ми також обговоримо відмінності між HashSet та TreeSet.
HashSet проти HashMap
Наступна таблиця показує основні відмінності між HashSet та HashMap.
HashSet | HashMap |
---|---|
Об'єкти додаються методом Add (). | HashMap використовує метод put () для додавання пар ключ-значення. |
Реалізує набір інтерфейсів. | Реалізує інтерфейс Map. |
Зберігає об’єкти певного типу. | Зберігайте пари даних ключ-значення. |
Не допускає повторення значень об’єктів. | Дозволяє повторювані значення, але не повторювані ключі. |
Може мати одне нульове значення. | Дозволяє одинарний нульовий ключ і кілька нульових значень. |
Внутрішньо використовує об'єкт HashMap для зберігання даних. | Використовує техніку хешування для зберігання даних. |
Повільніший у порівнянні з HashMap. | HashMap швидше. |
HashSet проти TreeSet
Нижче наведено відмінності між HashSet та TreeSet.
HashSet | TreeSet |
---|---|
Має обмежені функціональні можливості. | Забезпечує функції, які пропонують різні операції та полегшує використання Treeset, ніж HashSet. |
Він не підтримує впорядкування елементів. Зберігає об'єкти в довільному порядку. | Зберігає природний порядок елементів. |
Це допускає нульові значення. | Він не може мати нульові значення. |
Забезпечує кращу продуктивність, оскільки для основних операцій потрібен постійний час. | Пропонує часові витрати часу на основні операції. |
Набагато швидше, ніж Treeset. | Набір дерев повільніший. |
Внутрішньо реалізований за допомогою HashMap. | Набір дерев реалізований з використанням навігаційної Treemap. |
Для порівняння використовує метод equals (). | Для порівняння використовує метод compareTo (). |
Часті запитання
Q # 1) Як HashSet працює в Java?
Відповідь: HashSet в Java використовує HashMap для зберігання об'єкта. Один об’єкт HashMap створюється, коли створюється об’єкт HashSet. Елементи або об'єкти, введені в HashSet, зберігаються як ключі в HashMap.
Q # 2) Чи замовлений HashSet у Java?
Відповідь: Ні, це не замовлено на Java. Він зберігає елементи у довільному порядку.
Q # 3) Чи дозволяє HashSet значення null?
Відповідь: так, він допускає одне нульове значення. Це означає, що лише один елемент або об'єкт може бути нульовим, а не всі.
Q # 4) Чому HashSet використовується в Java?
Відповідь: Він використовується для зберігання пар ключ-значення в Java. Це схоже на HashTable, за винятком того, що HashSet несинхронізований, і на відміну від HashTable дозволяє нульові значення та один нульовий ключ. HashSet не впорядкований і може використовуватися для зберігання невпорядкованих об'єктів або коли порядок об'єктів не потрібен.
Q # 5) Чи синхронізується HashSet у Java?
Відповідь: Набір HashSet не синхронізований у Java. Крім того, він не захищений від ниток. Але ми можемо зробити його синхронізованим, використовуючи метод synchronizedSet ().
Висновок
HashSet - це колекція, що містить об'єкти, що розташовані в довільному порядку. Клас HashSet, який реалізує HashSet в Java, внутрішньо використовує HashTable, який реалізує HashMap.
Ми бачили оголошення та ініціалізацію HashSet разом із методами, наданими класом HashSet.
=> Прочитайте серію Easy Java Training.
Рекомендована література
- Двомісний підручник з прикладами програмування
- Підручник з Java Float із прикладами програмування
- Зворотний рядок Java: Підручник із прикладами програмування
- TreeSet в Java: Підручник із прикладами програмування
- Підручник JAVA для початківців: 100+ практичних відео-підручників Java
- Рядок Java містить () Підручник із методів із прикладами
- TreeMap в Java - Підручник з прикладами Java TreeMap
- Нерівний масив у Java - Підручник із прикладами