hashset java tutorial with programming examples
Ovaj tutorial objašnjava što je HashSet u Javi, HashSet metode, kako ga implementirati i iterirati te druge srodne koncepte uz pomoć primjera programiranja:
HashSet je zbirka koja pohranjuje predmete. HashSet u Javi implementiran je pomoću klase 'HashSet' paketa java.util.
Ova klasa implementira postavljeno sučelje. Koristi HashTable koja je instanca HashMap za pohranu.
=> Ovdje pogledajte Vodič za početnike za Java.
Što ćete naučiti:
Java HashSet
Neke od karakteristika HashSeta dane su u nastavku:
- Provodi sučelje Set koje HashTable ima kao unutarnju strukturu. HashTable je pak instanca HashMap-a.
- Ne čuva redoslijed elemenata. Elementi se pohranjuju slučajnim redoslijedom.
- HashSet ne dopušta dvostruke vrijednosti.
- Provodi sučelje koje se može klonirati i seriratizirano, osim sučelja Set.
- U HashSetu možemo imati null vrijednosti.
Hijerarhija klase HashSet
Hijerarhija klase HashSet dana je u nastavku:

Kao što je prikazano na gornjoj slici, klasa HashSet proširuje klasu AbstractSet koja zauzvrat implementira Set sučelje. Postavljeno sučelje nasljeđuje sučelje Collection koje zauzvrat proširuje Iterable sučelje.
Izdanje Java 8 predstavilo je novu metodu ‘spliterator’ u HashSetu koji stvara brzi spliterator koji izvodi kasno vezivanje nad elementima HashSet-a.
Opća deklaracija klase HashSet je:
javna klasa HashSet proširuje AbstractSet implementira Set,
Cloneable, Serializable
Uvoz HashSet-a
Funkcionalnost HashSet možemo uključiti u program pomoću izjave o uvozu kako je prikazano u nastavku:
import java.util.HashSet;
ili
uvoz java.util. *;
Deklarirajte HashSet u Javi
Objekt HashSet možemo stvoriti u Javi kako je dano u nastavku:
HashSet h = novi HashSet ();
Klasa HashSet pruža sljedeće konstruktore za stvaranje objekata.
| Prototip konstruktora | Opis | |
|---|---|---|
| ukloniti | Logičko uklanjanje (objekt o) | Uklanja zadani element o iz HashSet-a ako je dio HashSet-a. |
| HashSet () | Zadani konstruktor za HashSet | |
| HashSet (int kapacitet) | Konstruira objekt HashSet s danim 'kapacitetom'. | |
| HashSet (int kapacitet, plutajući faktor opterećenja) | Konstruira objekt HashSet s danim 'kapacitetom' i 'loadFactor'. | |
| HashSet (Zbirka c) | Konstruirajte objekt HashSet iz zadane kolekcije. |
Kao što je prikazano u gornjoj tablici, osim zadanog konstruktora, ova klasa također pruža konstruktore koji uzimaju kapacitet i loadfactor i drugu kolekciju kao svoje argumente. Objekte ove klase možemo stvoriti pomoću bilo kojeg od ovih konstruktora.
Inicijalizirajte HashSet
Sljedeći Java kôd prikazuje deklaraciju i inicijalizaciju objekta klase HashSet. U ovom programu stvaramo objekt klase HashSet iz ArrayList-a. U početku stvaramo i inicijaliziramo ArrayList, a zatim koristimo ovaj ArrayList za stvaranje i inicijalizaciju HashSet objekta.
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() + ' '); } } } Izlaz:

Kako HashSet interno djeluje na Javi?
Interno se implementira pomoću HashTable-a. HashTable je instanca HashMap-a. Ali HashMap je skup parova ključ / vrijednost. Pa kako možemo pohraniti HashSet u HashMap?
Vrijednosti objekta HashSet su ključevi HashMap-a.
Primjer Java HashSet-a
Pogledajmo detaljan primjer HashSet-a na Javi.
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() + ' '); } } } Izlaz:

Ovdje koristimo zadani konstruktor za stvaranje objekta HashSet. Zatim pomoću metode dodavanja dodajemo elemente (boje) u HashSet. Dalje, pomoću iteratora prelazimo kroz HashSet i ispisujemo sadržaj.
HashSet Iterator
U Javi se HashSet može prelaziti ili ponavljati na dva načina, kao što je objašnjeno u nastavku.
Bez korištenja Iteratora
Ovdje ne definiramo iterator na HashSetu. Umjesto toga koristimo forEach petlju. Sljedeći program prikazuje obilazak HashSeta pomoću forEach petlje.
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 + ' '); } } } Izlaz:

Korištenje Iteratora
Sljedeći pristup ponavljanju je korištenje iteratora. Ovdje definiramo iterator za klasu HashSet, a zatim ga prelazimo.
Sljedeći program prikazuje ovaj pristup.
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() + ' '); } } } Izlaz:

HashSet metode / API
Sljedeća tablica prikazuje metode koje pruža klasa HashSet. Dali smo prototip i opis svake metode. Kao što se vidi, imamo metode za osnovne operacije poput dodavanja, uklanjanja, veličine itd., Kao i za druge metode za provjeru sadržaja, praznine, iteratora, spliteratora itd.
| Metoda | Prototip metode | Opis |
|---|---|---|
| dodati | Logički dodatak (E e) | Dodaje dati element e u HashSet ako već nije prisutan. |
| čisto | Praznina prazna () | Briše ili uklanja sve elemente iz HashSet-a |
| klon | Klon objekta () | Koristi se za vraćanje plitke kopije ove instance HashSet-a: sami elementi nisu klonirani. |
| sadrži | Boolean sadrži (objekt o) | Provjerava sadrži li HashSet zadani objekt o i vraća true ako da. |
| prazno je | Boolean isEmpty () | Provjerava je li HashSet prazan. Vraća ako je da. |
| iterator | Iterator iterator () | Vraća iterator koji se koristi za prelazak HashSeta. |
| veličina | Int veličina () | Vraća veličinu ili broj elemenata prisutnih u HashSetu. |
| spliterator | Spliterator spliterator() | Vraća spliterator za brzo i neuspješno vezivanje za prolazak kroz HashSet. Ova je metoda uvedena u Javi 8. |
Opisali smo metode koje nudi klasa HashSet, a sada ćemo implementirati primjer koji pokazuje glavne metode klase.
Sljedeći Java program prikazuje metode ove klase.
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); } } Izlaz:

Pretvori HashSet u niz
Možemo koristiti metodu toArray () HashSet-a da pretvorimo zadani HashSet u niz. Imajte na umu da se vrsta podataka i veličina polja trebaju podudarati s podacima HashSet-a.
Sljedeći Java program prikazuje ovu pretvorbu.
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 + ' '); } } } Izlaz:

Poredaj skup hash
HashSet možemo razvrstati na Javi. HashSet elementi se izvorno ne sortiraju jer ne održava redoslijed elemenata. Možemo slijediti dva pristupa za sortiranje HashSet-a na Javi.
Korištenje metode Collections.sort ()
U ovom pristupu pretvaramo HashSet u popis. Zatim za sortiranje popisa koristimo metodu Collections.sort (). Zatim se ispisuje ovaj popis.
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); } } Izlaz:
pitanja za intervju za .net programere

Pretvaranjem HashSet-a u TreeSet
Korištenjem ovog pristupa pretvaramo HashSet u TreeSet. TreeSet održava redoslijed elemenata. Stoga, kada je HashSet prekriven TreeSetom, elementi se dovode u red.
Sljedeći Java program prikazuje ovu pretvorbu sortiranjem HashSet-a.
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); } } Izlaz:

Razmotrimo sada neke razlike između HashSet-a i HashMap-a. Također ćemo razgovarati o razlikama između HashSet-a i TreeSet-a.
HashSet vs HashMap
Sljedeća tablica prikazuje glavne razlike između HashSet-a i HashMap-a.
| HashSet | HashMap |
|---|---|
| Objekti se dodaju metodom Add (). | HashMap koristi metodu put () za dodavanje parova ključ / vrijednost. |
| Implementira Set sučelja. | Provodi sučelje Map. |
| Pohranjuje predmete određene vrste. | Pohranite parove ključ / vrijednost podataka. |
| Ne dopušta dvostruke vrijednosti objekata. | Omogućuje dvostruke vrijednosti, ali ne i dvostruke ključeve. |
| Može imati jednu null vrijednost. | Omogućuje jedan null ključ i više null vrijednosti. |
| Interno koristi objekt HashMap za pohranu podataka. | Koristi tehniku raspršivanja za pohranu podataka. |
| Je sporiji u usporedbi s HashMapom. | HashMap je brži. |
HashSet vs TreeSet
U nastavku su navedene razlike između HashSet-a i TreeSet-a.
| HashSet | TreeSet |
|---|---|
| Ima ograničenu funkcionalnost. | Pruža možda funkcije koje nude razne operacije i olakšava upotrebu Treeseta nego HashSet. |
| Ne održava redoslijed elemenata. Pohranjuje predmete slučajnim redoslijedom. | Održava prirodni poredak elemenata. |
| Omogućuje null vrijednosti. | Ne može imati null vrijednosti. |
| Daje bolje performanse jer za osnovne operacije treba stalno vrijeme. | Nudi log n vremenske troškove za osnovne operacije. |
| Puno brže od Treeseta. | Treeset je sporiji. |
| Interno implementirano pomoću HashMap-a. | Treeset se interno implementira pomoću navigacijske mape Treemap. |
| Za usporedbu koristi metodu equals (). | Za usporedbu koristi metodu compareTo (). |
Često postavljana pitanja
P # 1) Kako HashSet radi na Javi?
Odgovor: HashSet u Javi koristi HashMap za spremanje objekta. Jedan objekt HashMap kreira se kada se stvori objekt HashSet. Elementi ili objekti uneseni u HashSet pohranjuju se kao ključevi u HashMap.
P # 2) Je li HashSet naručen na Javi?
Odgovor: Ne, nije naručeno na Javi. Pohranjuje elemente slučajnim redoslijedom.
P # 3) Dopušta li HashSet null?
Odgovor: da, dopušta jednu null vrijednost. To znači da samo jedan element ili objekt može biti null, a ne svi.
P # 4) Zašto se HashSet koristi u Javi?
Odgovor: Koristi se za spremanje parova ključ / vrijednost u Javi. Sličan je HashTableu, s tim što je HashSet nesinkroniziran i za razliku od HashTable omogućuje null vrijednosti i jedan null ključ. HashSet nije naručen i može se koristiti za spremanje neuređenih objekata ili kada redoslijed objekata nije potreban.
P # 5) Je li HashSet sinkroniziran u Javi?
Odgovor: HashSet nije sinkroniziran na Javi. Također, nije siguran u niti. Ali možemo ga učiniti sinkroniziranim pomoću metode synchronizedSet ().
Zaključak
HashSet je zbirka koja sadrži predmete koji su slučajnim redoslijedom. Klasa HashSet koja implementira HashSet u Javi interno koristi HashTable koji implementira HashMap.
Vidjeli smo deklaraciju i inicijalizaciju HashSet-a zajedno s metodama koje pruža klasa HashSet.
=> Pročitajte seriju Easy Training Training.
Preporučena literatura
- Dvostruki vodič za Java s primjerima programiranja
- Vodič za Java Float s primjerima programiranja
- Java Obrnuti niz: Vodič s primjerima programiranja
- TreeSet u Javi: Vodič s primjerima programiranja
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala
- Java String sadrži () Vodič za metode s primjerima
- TreeMap u Javi - Vodič uz primjere Java TreeMap
- Nazubljeni niz u Javi - Vodič s primjerima