hashset java tutorial with programming examples
Tento tutoriál vysvetľuje, čo je HashSet v Jave, metódy HashSet, ako ho implementovať a iterovať a ďalšie súvisiace koncepty pomocou príkladov programovania:
HashSet je kolekcia, ktorá uchováva objekty. Sada HashSet v jazyku Java sa implementuje pomocou triedy „HashSet“ balíka java.util.
Táto trieda implementuje nastavené rozhranie. Používa HashTable, čo je inštancia HashMap na ukladanie.
=> Tu si pozrite príručku Java Beginners Guide.
Čo sa dozviete:
Sada Java HashSet
Niektoré z charakteristík HashSet sú uvedené nižšie:
- Implementuje rozhranie Set, ktoré má ako vnútornú štruktúru HashTable. HashTable je zase inštancia HashMap.
- Nezachováva poradie prvkov. Prvky sa ukladajú v náhodnom poradí.
- HashSet neumožňuje duplicitné hodnoty.
- Implementuje klonovateľné a serializovateľné rozhranie okrem rozhrania Set.
- V HashSete môžeme mať nulové hodnoty.
Hierarchia tried HashSet
Hierarchia triedy HashSet je uvedená nižšie:
Ako je znázornené na obrázku vyššie, trieda HashSet rozširuje triedu AbstractSet, ktorá zase implementuje rozhranie Set. Nastavené rozhranie dedí po rozhraní Collection, ktoré zase rozširuje rozhranie Iterable.
Vydanie Java 8 predstavilo novú metódu „Spliterator“ v HashSet, ktorý vytvára rýchlospájací rozdeľovač, ktorý vykonáva neskorú väzbu nad prvkami HashSet.
Všeobecné vyhlásenie triedy HashSet je:
verejná trieda HashSet rozširuje AbstractSet implementuje Set,
Klonovateľný, Serializovateľný
Importovať HashSet
Funkciu HashSet môžeme do programu zahrnúť pomocou príkazu na import, ako je uvedené nižšie:
import java.util.HashSet;
alebo
import java.util. *;
Deklarovať HashSet v Jave
Môžeme vytvoriť objekt HashSet v Jave, ako je uvedené nižšie:
HashSet h = nový HashSet ();
Trieda HashSet poskytuje na vytváranie objektov nasledujúce konštruktory.
Prototyp konštruktéra | Popis | |
---|---|---|
odstrániť | Boolean remove (Objekt o) | Odstráni daný prvok o z HashSet, ak je súčasťou HashSet. |
HashSet () | Predvolený konštruktor pre HashSet | |
HashSet (int kapacita) | Vytvorí objekt HashSet s danou „kapacitou“. | |
HashSet (int kapacita, float loadFactor) | Vytvorí objekt HashSet s danými kapacitami a loadFactor. | |
HashSet (kolekcia c) | Vytvorte objekt HashSet z danej kolekcie. |
Ako je uvedené v tabuľke vyššie, okrem predvoleného konštruktora poskytuje táto trieda aj konštruktory, ktoré ako argumenty berú kapacitu a faktor načítania a inú kolekciu. Môžeme vytvoriť objekty tejto triedy pomocou ktoréhokoľvek z týchto konštruktorov.
Inicializujte HashSet
Nasledujúci kód Java zobrazuje deklaráciu a inicializáciu objektu triedy HashSet. V tomto programe vytvoríme objekt triedy HashSet z ArrayList. Spočiatku vytvárame a inicializujeme ArrayList a potom pomocou tohto ArrayList vytvárame a inicializujeme objekt 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() + ' '); } } }
Výkon:
Ako funguje HashSet interne v Jave?
Interne sa implementuje pomocou tabuľky HashTable. HashTable je inštanciou HashMap. HashMap je však kolekcia párov kľúč - hodnota. Ako teda uložíme HashSet do HashMap?
Hodnoty objektov HashSet sú kľúčmi k HashMap.
Príklad Java HashSet
Pozrime sa na podrobný príklad HashSet v Jave.
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() + ' '); } } }
Výkon:
Tu používame predvolený konštruktor na vytvorenie objektu HashSet. Potom pomocou metódy pridania pridáme prvky (farby) do sady HashSet. Ďalej pomocou iterátora prechádzame HashSet a tlačíme obsah.
Iterátor HashSet
V prostredí Java je možné HashSet prechádzať alebo iterovať dvoma spôsobmi, ako je uvedené nižšie.
Bez použitia Iterátora
Tu nedefinujeme iterátor v HashSete. Namiesto toho použijeme slučku forEach. Nasledujúci program zobrazuje prechod HashSet pomocou slučky 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 + ' '); } } }
Výkon:
Pomocou Iterátora
Ďalším prístupom k iterácii je použitie iterátora. Tu definujeme iterátor pre triedu HashSet a potom ňou prechádzame.
Nasledujúci program ukazuje tento prístup.
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() + ' '); } } }
Výkon:
Metódy HashSet / API
Nasledujúca tabuľka zobrazuje metódy poskytované triedou HashSet. Pre každú metódu sme poskytli prototyp a popis. Ako je vidieť, máme k dispozícii metódy pre základné operácie, ako je pridanie, odstránenie, veľkosť atď., Ako aj pre ďalšie metódy na kontrolu obsahu, prázdnoty, iterátora, rozdeľovača atď.
Metóda | Metóda Prototyp | Popis |
---|---|---|
pridať | Boolovský prírastok (E e) | Pridá daný prvok e do sady HashSet, ak ešte nie je prítomný. |
jasný | Prázdne miesto () | Vymaže alebo odstráni všetky prvky zo sady HashSet |
klon | Klon objektu () | Používa sa na vrátenie plytkej kópie tejto inštancie HashSet: samotné prvky nie sú klonované. |
obsahuje | Boolean obsahuje (objekt o) | Skontroluje, či sada HashSet obsahuje daný objekt o, a vráti hodnotu true, ak áno. |
je prázdny | Boolean isEmpty () | Skontroluje, či je HashSet prázdny. Ak áno, vráti hodnotu true. |
iterátor | Iterátor iterátor () | Vráti iterátor, ktorý sa používa na prechod HashSet. |
veľkosť | Vnútorná veľkosť () | Vráti veľkosť alebo počet prvkov prítomných v HashSet. |
rozdeľovač | Splitterator spliterator () | Vráti štiepačku s rýchlym zlyhaním a neskorým viazaním, aby prechádzala HashSet. Táto metóda bola zavedená v prostredí Java 8. |
Popísali sme metódy poskytované triedou HashSet, teraz implementujme príklad, ktorý demonštruje hlavné metódy triedy.
Nižšie uvedený program Java demonštruje metódy tejto triedy.
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); } }
Výkon:
Preveďte HashSet na pole
Môžeme použiť metódu toArray () z HashSet na prevod danej HashSet na pole. Upozorňujeme, že dátový typ a veľkosť poľa by sa mali zhodovať s údajmi a veľkosťou poľa HashSet.
Nasledujúci program Java zobrazuje túto konverziu.
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 + ' '); } } }
Výkon:
Zoradiť hashovaciu sadu
HashSet môžeme triediť v Jave. Prvky HashSet nie sú pôvodne zoradené, pretože nezachováva poradie prvkov. Pri triedení sady HashSet v jazyku Java môžeme postupovať dvoma spôsobmi.
Používanie metódy Collections.sort ()
V tomto prístupe konvertujeme HashSet na zoznam. Potom na zoradenie zoznamu použijeme metódu Collections.sort (). Tento zoznam sa potom vytlačí.
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); } }
Výkon:
otázky a odpovede na pohovor s technickou podporou pre bpo
Prevodom HashSet na TreeSet
Pomocou tohto prístupu prevedieme HashSet na TreeSet. TreeSet udržuje poradie prvkov. Preto keď je sada HashSet zahrnutá do sady TreeSet, prvky sa dajú do poriadku.
Nasledujúci program Java zobrazuje túto konverziu, čím triedi 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); } }
Výkon:
Poďme si teraz predstaviť niektoré rozdiely medzi programami HashSet a HashMap. Budeme tiež diskutovať o rozdieloch medzi HashSet a TreeSet.
HashSet Vs HashMap
V nasledujúcej tabuľke sú uvedené hlavné rozdiely medzi programami HashSet a HashMap.
HashSet | HashMap |
---|---|
Objekty sa pridávajú pomocou metódy Add (). | HashMap používa metódu put () na pridanie párov kľúč - hodnota. |
Implementuje rozhranie set. | Implementuje rozhranie mapy. |
Ukladá predmety konkrétneho typu. | Ukladajte páry údajov a kľúčov. |
Nepovoľuje duplicitné hodnoty objektov. | Umožňuje duplicitné hodnoty, ale nie duplicitné kľúče. |
Môže mať jednu nulovú hodnotu. | Umožňuje jeden nulový kľúč a viac nulových hodnôt. |
Na ukladanie údajov interne používa objekt HashMap. | Používa hashovaciu techniku na ukladanie údajov. |
Je pomalší v porovnaní s HashMap. | HashMap je rýchlejší. |
HashSet Vs TreeSet
Nižšie sú uvedené rozdiely medzi HashSet a TreeSet.
HashSet | TreeSet |
---|---|
Má obmedzenú funkčnosť. | Poskytuje funkcie mája, ktoré ponúkajú rôzne operácie a uľahčujú používanie stromu ako HashSet. |
Nezachováva usporiadanie prvkov. Ukladá objekty v náhodnom poradí. | Zachováva prirodzené usporiadanie prvkov. |
Umožňuje nulové hodnoty. | Nemôže mať nulové hodnoty. |
Poskytuje lepší výkon, pretože základné operácie si vyžadujú neustály čas. | Ponúka denné časové náklady na základné operácie. |
Oveľa rýchlejšie ako Treeset. | Stromy sú pomalšie. |
Interne implementované pomocou HashMap. | Treeset je interne implementovaný pomocou splavnej Treemap. |
Na porovnanie používa metódu equals (). | Používa na porovnanie metódu compareTo (). |
často kladené otázky
Otázka č. 1) Ako funguje HashSet v Jave?
Odpoveď: HashSet v Jave používa na uloženie objektu program HashMap. Jeden objekt HashMap sa vytvorí pri vytvorení objektu HashSet. Prvky alebo objekty zadané v HashSete sa ukladajú ako kľúče v HashMap.
Otázka 2) Je HashSet objednaný v Jave?
Odpoveď: Nie, nie je objednaný v Jave. Ukladá prvky v náhodnom poradí.
Otázka 3) Umožňuje HashSet hodnotu null?
Odpoveď: áno, umožňuje jednu nulovú hodnotu. To znamená, že iba jeden prvok alebo objekt môže byť prázdny a nie všetky.
Otázka č. 4) Prečo sa HashSet používa v prostredí Java?
Odpoveď: Používa sa na ukladanie párov kľúč - hodnota v Jave. Je to podobné ako s HashTable s výnimkou, že HashSet je nesynchronizovaný a na rozdiel od HashTable umožňuje nulové hodnoty a jeden nulový kľúč. HashSet nie je objednaný a je možné ho použiť na uloženie neusporiadaných objektov alebo v prípade, že nie je potrebné poradie objektov.
Otázka 5) Je HashSet synchronizovaný v Jave?
Odpoveď: Sada HashSet nie je synchronizovaná v prostredí Java. Tiež to nie je bezpečné pre vlákna. Môžeme ho však synchronizovať pomocou metódy synchronizedSet ().
Záver
HashSet je kolekcia obsahujúca objekty, ktoré sú v náhodnom poradí. Trieda HashSet, ktorá implementuje HashSet v Jave interne, používa HashTable, ktorá implementuje HashMap.
Videli sme deklaráciu a inicializáciu HashSet spolu s metódami poskytnutými triedou HashSet.
=> Prečítajte si sériu Easy Java Training Series.
Odporúčané čítanie
- Výukový program Java s príkladmi programovania
- Výukový program Java Float s príkladmi programovania
- Reverzný reťazec Java: Výukový program s príkladmi programovania
- TreeSet v Jave: Výukový program s príkladmi programovania
- Výukový program JAVA pre začiatočníkov: viac ako 100 praktických výučbových programov Java Video
- Java String obsahuje () Výukový program metód s príkladmi
- TreeMap In Java - návod s príkladmi Java TreeMap
- Jagged Array In Java - návod s príkladmi