hashset java tutorial with programming examples
Ta vadnica razloži, kaj je HashSet v Javi, metode HashSet, kako ga implementirati in iterirati ter druge s tem povezane koncepte s pomočjo programov:
HashSet je zbirka, ki hrani predmete. HashSet v Javi se izvaja z uporabo razreda „HashSet“ paketa java.util.
Ta razred izvaja nastavljeni vmesnik. Za shranjevanje uporablja HashTable, ki je primerek HashMap.
=> Tu si oglejte Vodnik za začetnike Java.
Kaj se boste naučili:
Java HashSet
Nekatere značilnosti sistema HashSet so navedene spodaj:
- Izvaja vmesnik Set, ki ima HashTable kot notranjo strukturo. HashTable pa je primerek HashMap.
- Ne ohrani vrstnega reda elementov. Elementi so shranjeni v naključnem vrstnem redu.
- HashSet ne dovoljuje podvojenih vrednosti.
- Izvaja vmesnik, ki ga je mogoče klonirati in serirati, razen vmesnika Set
- V HashSetu lahko imamo ničelne vrednosti.
Hierarhija razreda HashSet
Hierarhija razreda HashSet je podana spodaj:
Kot je prikazano na zgornji sliki, razred HashSet razširja razred AbstractSet, ki nato implementira vmesnik Set. Nastavljeni vmesnik podeduje vmesnik Collection, ki pa razširi vmesnik Iterable.
Izdanje Java 8 je predstavilo novo metodo 'Spliterator' v HashSetu, ki ustvari spliterator s hitrim odpovedovanjem, ki izvaja pozno vezavo elementov HashSet.
Splošna izjava razreda HashSet je:
javni razred HashSet razširja AbstractSet implementira Set,
Cloneable, Serializable
Uvozi HashSet
Funkcijo HashSet lahko v program vključimo s pomočjo izjave o uvozu, kot je prikazano spodaj:
uvoz java.util.HashSet;
ali
uvoz java.util. *;
Navedite HashSet v Javi
V Javi lahko ustvarimo objekt HashSet, kot je navedeno spodaj:
HashSet h = nov HashSet ();
Razred HashSet ponuja naslednje konstruktorje za ustvarjanje predmetov.
Prototip konstruktorja | Opis | |
---|---|---|
Odstrani | Logično odstranjevanje (objekt o) | Odstrani dani element o iz HashSet-a, če je del HashSet-a. |
HashSet () | Privzeti konstruktor za HashSet | |
HashSet (notranja zmogljivost) | Konstruira objekt HashSet z dano 'zmogljivostjo'. | |
HashSet (int zmogljivost, float loadFactor) | Konstruira objekt HashSet z dano 'zmogljivostjo' in 'loadFactor'. | |
HashSet (Zbirka c) | Izdelajte objekt HashSet iz dane zbirke. |
Kot je prikazano v zgornji tabeli, ta razred poleg privzetega konstruktorja ponuja tudi konstruktorje, ki za svoje argumente jemljejo kapaciteto in faktor obremenitve ter drugo zbirko. Predmete tega razreda lahko ustvarimo s katerim koli od teh konstruktorjev.
Inicializirajte HashSet
Naslednja koda Java prikazuje deklaracijo in inicializacijo predmeta razreda HashSet. V tem programu ustvarimo objekt razreda HashSet iz ArrayList. Sprva ustvarimo in inicializiramo ArrayList, nato pa s tem ArrayList ustvarimo in inicializiramo 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() + ' '); } } }
Izhod:
Kako HashSet deluje interno v Javi?
Interno se izvaja s pomočjo HashTable. HashTable je primerek HashMap. Toda HashMap je zbirka parov ključ-vrednost. Torej, kako shranimo HashSet v HashMap?
Vrednosti predmetov HashSet so ključi HashMap-a.
Primer Java HashSet
Oglejmo si podroben primer HashSet v 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() + ' '); } } }
Izhod:
Tu uporabimo privzeti konstruktor za ustvarjanje predmeta HashSet. Nato z uporabo metode add v HashSet dodamo elemente (barve). Nato s pomočjo iteratorja prečkamo HashSet in natisnemo vsebino.
HashSet Iterator
V Javi je mogoče HashSet prehoditi ali iterirati na dva načina, kot je opisano spodaj.
Brez uporabe Iteratorja
Tu ne določimo iteratorja na HashSetu. Namesto tega uporabimo zanko forEach. Naslednji program prikazuje prehod HashSet-a z uporabo zanke 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 + ' '); } } }
Izhod:
Uporaba Iteratorja
Naslednji pristop ponavljanja je uporaba iteratorja. Tu določimo iterator za razred HashSet in ga nato prehodimo.
Naslednji program prikazuje ta pristop.
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() + ' '); } } }
Izhod:
Metode / API HashSet
Naslednja tabela prikazuje metode, ki jih ponuja razred HashSet. Priskrbeli smo prototip in opis vsake metode. Kot je razvidno, imamo metode za osnovne operacije, kot so dodajanje, odstranjevanje, velikost itd., Pa tudi za druge metode za preverjanje vsebine, praznine, iteratorja, spliteratorja itd.
Metoda | Prototip metode | Opis |
---|---|---|
dodajte | Logično dodajanje (E e) | Dani element e doda HashSetu, če še ni prisoten. |
jasno | Razveljavi prazno () | Počisti ali odstrani vse elemente iz HashSet-a |
klon | Klon predmeta () | Uporablja se za vrnitev plitke kopije tega primerka HashSet: sami elementi niso klonirani. |
vsebuje | Logična vrednost vsebuje (predmet o) | Preveri, ali HashSet vsebuje dani objekt o in vrne true, če da. |
je prazno | Logična isEmpty () | Preveri, ali je HashSet prazen. Vrne true, če da. |
iterator | Iterator iteratorja () | Vrne iterator, ki se uporablja za prehod HashSet-a. |
velikost | Int velikost () | Vrne velikost ali število elementov, ki so prisotni v HashSetu. |
cepilnik | Spliterator spliterator () | Vrne spliterator, ki je hiter in pozno vezan, da prečka HashSet. Ta metoda je bila uvedena v Javi 8. |
Opisali smo metode, ki jih ponuja razred HashSet, zdaj pa izvedimo primer, ki prikazuje glavne metode razreda.
Spodnji program Java prikazuje metode tega razreda.
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); } }
Izhod:
Pretvori HashSet v matriko
Za pretvorbo danega HashSet v matriko lahko uporabimo metodo toArray () HashSet. Upoštevajte, da se morata vrsta in velikost polja ujemati s podatki HashSet.
Naslednji program Java prikazuje to pretvorbo.
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 + ' '); } } }
Izhod:
Razvrstite HashSet
HashSet lahko razvrstimo v Javi. Elementi HashSet niso prvotno razvrščeni, saj ne vzdržujejo vrstnega reda elementov. Za razvrščanje HashSet-a v Javi lahko sledimo dvema pristopoma.
Uporaba metode Collections.sort ()
Pri tem pristopu pretvorimo HashSet v seznam. Nato za razvrščanje seznama uporabimo metodo Collections.sort (). Ta seznam se nato natisne.
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); } }
Izhod:
najboljša brezplačna programska oprema za izboljšanje zmogljivosti računalnika
S pretvorbo HashSet v TreeSet
S tem pristopom pretvorimo HashSet v TreeSet. TreeSet vzdržuje vrstni red elementov. Ko je HashSet prekrit s TreeSet, so elementi postavljeni v red.
Naslednji program Java prikazuje to pretvorbo in s tem razvršča 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); } }
Izhod:
Pogovorimo se zdaj o nekaterih razlikah med HashSet in HashMap. Obravnavali bomo tudi razlike med HashSet in TreeSet.
HashSet Vs HashMap
Naslednja tabela prikazuje glavne razlike med HashSet in HashMap.
HashSet | HashMap |
---|---|
Predmeti se dodajo z uporabo metode Add (). | HashMap uporablja metodo put () za dodajanje parov ključ / vrednost. |
Implementira Set vmesnik. | Izvaja vmesnik Map. |
Shrani predmete določene vrste. | Shranite pare ključ-vrednost podatkov. |
Ne dovoli podvojenih vrednosti predmetov. | Omogoča podvojene vrednosti, ne pa tudi podvojenih ključev. |
Lahko ima eno ničelno vrednost. | Omogoča posamezen ničelni ključ in več ničelnih vrednosti. |
Interno uporablja objekt HashMap za shranjevanje podatkov. | Za shranjevanje podatkov uporablja tehniko razprševanja. |
Je počasnejši v primerjavi s HashMapom. | HashMap je hitrejši. |
HashSet Vs TreeSet
Spodaj so navedene razlike med HashSet in TreeSet.
HashSet | TreeSet |
---|---|
Ima omejeno funkcionalnost. | Ponuja lahko funkcije, ki ponujajo različne operacije, in olajša uporabo Treeset kot HashSet. |
Ne vzdržuje urejanja elementov. Predmete shrani v naključnem vrstnem redu. | Ohranja naravno urejenost elementov. |
Omogoča ničelne vrednosti. | Ne more imeti ničelnih vrednosti. |
Omogoča boljše delovanje, saj traja ves čas za osnovne operacije. | Ponuja log n časovne stroške za osnovne operacije. |
Veliko hitreje kot Treeset. | Treeset je počasnejši. |
Interno izvedeno s pomočjo HashMap. | Treeset je interno implementiran s pomočjo navigacijskega Treemap. |
Za primerjavo uporablja metodo equals (). | Za primerjavo uporablja metodo compareTo (). |
Pogosto zastavljena vprašanja
V # 1) Kako HashSet deluje v Javi?
Odgovor: HashSet v Javi uporablja HashMap za shranjevanje predmeta. En objekt HashMap se ustvari, ko se ustvari objekt HashSet. Elementi ali predmeti, vneseni v HashSet, so shranjeni kot ključi v HashMap-u.
V # 2) Ali je HashSet naročen v Javi?
Odgovor: Ne, ni naročeno v Javi. Elemente shranjuje v naključnem vrstnem redu.
V # 3) Ali HashSet dovoljuje null?
Odgovor: da, dovoljuje eno null vrednost. To pomeni, da je lahko samo en element ali predmet ničen in ne vsi.
V # 4) Zakaj se HashSet uporablja v Javi?
Odgovor: Uporablja se za shranjevanje parov ključ / vrednost v Javi. Podoben je HashTable z izjemo, da je HashSet nesinhroniziran in za razliko od HashTable omogoča ničelne vrednosti in en null ključ. HashSet ni razvrščen in se lahko uporablja za shranjevanje neurejenih predmetov ali kadar vrstni red predmetov ni potreben.
V # 5) Ali je HashSet sinhroniziran v Javi?
Odgovor: HashSet ni sinhroniziran v Javi. Prav tako ni varno pred nitmi. Lahko pa ga sinhroniziramo z uporabo metode synchronizedSet ().
Zaključek
HashSet je zbirka, ki vsebuje predmete v naključnem vrstnem redu. Razred HashSet, ki implementira HashSet v Javi, interno uporablja HashTable, ki implementira HashMap.
Videli smo deklaracijo in inicializacijo HashSet skupaj z metodami, ki jih ponuja razred HashSet.
=> Preberite serijo Easy Java Training Series.
Priporočeno branje
- Dvojna vadnica Java s primeri programiranja
- Vadnica Java Float s primeri programiranja
- Java Reverse String: Vadnica s primeri programiranja
- TreeSet v Javi: Vadnica s primeri programiranja
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic
- Java String vsebuje () Vadnico metode s primeri
- TreeMap v Javi - Vadnica z primeri Java TreeMap
- Nazobčan niz v Javi - Vadnica s primeri