hashset java tutorial with programming examples
Този урок обяснява какво е HashSet в Java, методите HashSet, как да се внедрят и итератират през него и други свързани понятия с помощта на примери за програмиране:
HashSet е колекция, която съхранява обекти. HashSet в Java е реализиран с помощта на класа „HashSet“ на пакета java.util.
Този клас реализира зададен интерфейс. Той използва HashTable, който е екземпляр на HashMap за съхранение.
=> Погледнете тук ръководството за начинаещи Java.
Какво ще научите:
- Java HashSet
- HashSet срещу HashMap
- HashSet срещу TreeSet
- Заключение
Java HashSet
Някои от характеристиките на HashSet са дадени по-долу:
- Прилага интерфейс Set, който има HashTable като вътрешна структура. HashTable от своя страна е екземпляр на HashMap.
- Той не запазва реда на елементите. Елементите се съхраняват в произволен ред.
- HashSet не позволява дублирани стойности.
- Внедрява Cloneable и Serializable интерфейс, освен Set интерфейса.
- Можем да имаме нулеви стойности в HashSet.
Йерархия на класовете HashSet
Йерархията на класа HashSet е дадена по-долу:
Както е показано на горната фигура, класът HashSet разширява класа AbstractSet, който от своя страна реализира интерфейса Set. Интерфейсът set наследява интерфейса Collection, който от своя страна разширява интерфейса Iterable.
Пускането на Java 8 представи нов метод „Сплитератор“ в HashSet, който създава бързоуспяващ сплайтър, който извършва късно свързване върху елементите на HashSet.
Общата декларация на класа HashSet е:
публичен клас HashSet разширява AbstractSet изпълнява Set,
Клонируем, сериализуем
Импортиране на HashSet
Можем да включим функционалността HashSet в програмата, като използваме изявлението за импортиране, както е показано по-долу:
импортиране на java.util.HashSet;
или
импортиране на java.util. *;
Декларирайте HashSet в Java
Можем да създадем обект HashSet в Java, както е дадено по-долу:
HashSet h = нов HashSet ();
Класът HashSet предоставя следните конструктори за създаване на обекти.
Прототип на конструктора | Описание | |
---|---|---|
Премахване | Булево премахване (Обект o) | Премахва дадения елемент o от HashSet, ако е част от HashSet. |
HashSet () | Конструктор по подразбиране за HashSet | |
HashSet (вътрешен капацитет) | Конструира HashSet обект с даден ‘капацитет’. | |
HashSet (вътрешен капацитет, float loadFactor) | Конструира 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 е празен. Връща вярно, ако да. |
итератор | Итератор на итератор () | Връща итератор, който се използва за пресичане на HashSet. |
размер | Int размер () | Връща размера или броя на елементите, налични в HashSet. |
сплитер | Spliterator spliterator () | Връща бърз за неуспех и късно свързващ сплитератор, за да премине през 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 отворени jar файлове
Чрез преобразуване на 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 () за добавяне на двойки ключ-стойност. |
Реализира Set интерфейс. | Прилага интерфейс Карта. |
Съхранява обекти от определен тип. | Съхранявайте двойки ключ-стойност на данните. |
Не позволява дублирани стойности на обекти. | Позволява дублирани стойности, но не дублиращи се ключове. |
Може да има единична нулева стойност. | Позволява единичен нулев ключ и множество нулеви стойности. |
Вътрешно използва HashMap Object за съхранение на данни. | Използва хешираща техника за съхраняване на данни. |
По-бавен е в сравнение с HashMap. | HashMap е по-бърз. |
HashSet срещу TreeSet
По-долу са посочени разликите между HashSet и TreeSet.
HashSet | TreeSet |
---|---|
Има ограничена функционалност. | Предоставя функции, които предлагат различни операции и улеснява използването на Treeset, отколкото HashSet. |
Той не поддържа подреждане на елементи. Съхранява обекти в произволен ред. | Поддържа естественото подреждане на елементите. |
Тя позволява нулеви стойности. | Не може да има нулеви стойности. |
Дава по-добра производителност, тъй като отнема постоянно време за основни операции. | Предлага дневник n времеви разходи за основни операции. |
Много по-бързо от Treeset. | Treeset е по-бавен. |
Вътрешно внедрен с помощта на HashMap. | Treeset се изпълнява вътрешно с помощта на навигационна Treemap. |
Използва метод equals () за сравнение. | За сравнение използва метода compareTo (). |
често задавани въпроси
В # 1) Как работи HashSet в Java?
Отговор: HashSet в Java използва HashMap за съхраняване на обекта. Един HashMap обект се създава, когато се създава HashSet обект. Елементите или обектите, въведени в HashSet, се съхраняват като ключове в HashMap.
В # 2) Подрежда ли се HashSet в Java?
Отговор: Не, не е поръчано в Java. Той съхранява елементи в произволен ред.
В # 3) Позволява ли HashSet нула?
Отговор: да, позволява една нулева стойност. Това означава, че само един елемент или обект може да бъде нула, а не всички.
В # 4) Защо се използва HashSet в Java?
Отговор: Използва се за съхраняване на двойки ключ-стойност в Java. Той е подобен на HashTable с изключение на това, че HashSet е несинхронизиран и за разлика от HashTable позволява нулеви стойности и един нулев ключ. HashSet не е подреден и може да се използва за съхраняване на неподредени обекти или когато редът на обектите не се изисква.
В # 5) Синхронизира ли се HashSet в Java?
Отговор: HashSet не се синхронизира в Java. Освен това не е безопасно за нишки. Но можем да го направим синхронизиран, използвайки метода synchronizedSet ().
Заключение
HashSet е колекция, съдържаща обекти, които са в произволен ред. Класът HashSet, който реализира HashSet в Java, използва вътрешно HashTable, който реализира HashMap.
Видяхме декларирането и инициализирането на HashSet заедно с методите, предоставени от класа HashSet.
=> Прочетете серията Easy Training Training.
Препоръчително четене
- Java Double - Урок с примери за програмиране
- Урок за Java Float с примери за програмиране
- Java Reverse String: Урок с примери за програмиране
- TreeSet в Java: Урок с примери за програмиране
- Урок за JAVA за начинаещи: 100+ практически ръководства за Java видео
- Java String съдържа () урок за методи с примери
- TreeMap в Java - Урок с примери за TreeMap на Java
- Назъбен масив в Java - урок с примери