hashset java tutorial with programming examples
Acest tutorial explică ce este HashSet în Java, metodele HashSet, cum se implementează și se repetă prin el și alte concepte conexe cu ajutorul unor exemple de programare:
Un HashSet este o colecție care stochează obiecte. HashSet în Java este implementat folosind clasa „HashSet” a pachetului java.util.
Această clasă implementează o interfață setată. Folosește HashTable, care este o instanță HashMap pentru stocare.
=> Consultați aici Ghidul pentru începători Java.
Ce veți învăța:
Java HashSet
Unele dintre caracteristicile HashSet sunt date mai jos:
- Implementează o interfață Set care are HashTable ca structură internă. La rândul său, HashTable este o instanță HashMap.
- Nu păstrează ordinea elementelor. Elementele sunt stocate în ordine aleatorie.
- HashSet nu permite duplicarea valorilor.
- Implementează o interfață clonabilă și serializabilă în afară de interfața Set.
- Putem avea valori nule în HashSet.
Ierarhia clasei HashSet
Ierarhia clasei HashSet este dată mai jos:
Așa cum se arată în figura de mai sus, clasa HashSet extinde clasa AbstractSet care la rândul său implementează interfața Set. Interfața setată moștenește interfața Colecție care, la rândul său, extinde interfața Iterable.
Versiunea Java 8 a introdus o nouă metodă „Spliterator” în HashSet care creează un spliterator rapid care execută legarea târzie asupra elementelor HashSet.
Declarația generală a clasei HashSet este:
public class HashSet extinde AbstractSet implementează Set,
Clonabil, serializabil
Importați HashSet
Putem include funcționalitatea HashSet în program folosind declarația de import așa cum se arată mai jos:
import java.util.HashSet;
sau
import java.util. *;
Declarați HashSet în Java
Putem crea un obiect HashSet în Java așa cum este prezentat mai jos:
HashSet h = HashSet nou ();
Clasa HashSet oferă următorii constructori pentru a crea obiecte.
Prototip constructor | Descriere | |
---|---|---|
elimina | Eliminare booleană (Obiectul o) | Elimină elementul dat o din HashSet dacă face parte din HashSet. |
HashSet () | Constructor implicit pentru HashSet | |
HashSet (capacitate int) | Construiește un obiect HashSet cu „capacitatea” dată. | |
HashSet (capacitate int, float loadFactor) | Construiește un obiect HashSet cu „capacitatea” și „loadFactor” date. | |
HashSet (Colecția c) | Construiți un obiect HashSet dintr-o colecție dată. |
Așa cum se arată în tabelul de mai sus, în afară de constructorul implicit, această clasă oferă, de asemenea, constructorii care iau capacitatea și loadfactor și o altă colecție ca argumente. Putem crea obiectele acestei clase folosind oricare dintre acești constructori.
Inițializați HashSet
Următorul cod Java arată declarația și inițializarea obiectului clasei HashSet. În acest program, creăm un obiect de clasă HashSet dintr-un ArrayList. Inițial, creăm și inițializăm ArrayList și apoi folosim acest ArrayList pentru a crea și inițializa un obiect 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() + ' '); } } }
Ieșire:
Cum funcționează HashSet intern în Java?
Intern, este implementat folosind un HashTable. HashTable este o instanță a HashMap. Dar HashMap este o colecție de perechi cheie-valoare. Deci, cum stocăm HashSet într-un HashMap?
Valorile obiectelor HashSet sunt cheile HashMap-ului.
Exemplu Java HashSet
Să vedem un exemplu detaliat de HashSet în 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() + ' '); } } }
Ieșire:
Aici, folosim constructorul implicit pentru a crea un obiect HashSet. Apoi folosind metoda add adăugăm elemente (culori) la HashSet. Apoi, folosim un iterator pentru a parcurge HashSet și a imprima conținutul.
HashSet Iterator
În Java, HashSet poate fi traversat sau iterat în două moduri, așa cum este discutat mai jos.
Fără a utiliza Iterator
Aici, nu definim un iterator pe HashSet. În schimb, folosim o buclă forEach. Următorul program arată traversarea HashSet utilizând o buclă 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 + ' '); } } }
Ieșire:
Folosind Iterator
Următoarea abordare a iterării este utilizarea unui iterator. Aici, definim un iterator pentru clasa HashSet și apoi traversăm prin ea.
Următorul program arată această abordare.
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() + ' '); } } }
Ieșire:
HashSet Methods / API
Următorul tabel prezintă metodele furnizate de clasa HashSet. Am furnizat prototipul și descrierea pentru fiecare metodă. După cum s-a văzut, avem metode pentru operațiuni de bază, cum ar fi adăugare, eliminare, dimensiune etc.
Metodă | Metoda prototip | Descriere |
---|---|---|
adăuga | Adăugare booleană (E e) | Adaugă elementul dat e la HashSet dacă nu este deja prezent. |
clar | Vid clar () | Șterge sau elimină toate elementele din HashSet |
clona | Clonare obiect () | Este folosit pentru a returna o copie superficială a acestei instanțe HashSet: elementele în sine nu sunt clonate. |
conține | Boolean conține (Obiectul o) | Verifică dacă HashSet conține obiectul dat o și returnează true dacă da. |
este gol | Boolean isEmpty () | Verifică dacă HashSet este gol. Returnează adevărat dacă da. |
iterator | Iterator iterator () | Returnează un iterator care este folosit pentru a traversa HashSet. |
mărimea | Dimensiune Int () | Returnează dimensiunea sau numărul de elemente prezente în HashSet. |
despicatoare | Spliterator spliterator () | Returnează un spliterator rapid și cu legare tardivă pentru a traversa HashSet. Această metodă a fost introdusă în Java 8. |
Am descris metodele furnizate de clasa HashSet, acum să implementăm un exemplu care să demonstreze metodele majore ale clasei.
Programul Java de mai jos demonstrează metodele acestei clase.
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); } }
Ieșire:
Convertiți HashSet în matrice
Putem folosi metoda toArray () a HashSet pentru a converti HashSet-ul dat într-o matrice. Rețineți că tipul de date și dimensiunea matricei trebuie să se potrivească cu cele ale HashSet.
Următorul program Java arată această conversie.
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 + ' '); } } }
Ieșire:
Sortează un HashSet
Putem sorta un HashSet în Java. Elementele HashSet nu sunt sortate inițial, deoarece nu mențin ordinea elementelor. Putem urma două abordări pentru a sorta un HashSet în Java.
Folosind metoda Collections.sort ()
În această abordare, convertim HashSet într-o listă. Apoi, folosim metoda Collections.sort () pentru a sorta lista. Această listă este apoi tipărită.
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); } }
Ieșire:
cum să solicitați promovare în evaluarea performanței
Prin conversia HashSet în TreeSet
Folosind această abordare, convertim HashSet în TreeSet. TreeSet menține ordinea elementelor. Prin urmare, atunci când HashSet este acoperit în TreeSet, elementele sunt puse în ordine.
Următorul program Java arată această conversie sortând astfel 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); } }
Ieșire:
Să discutăm acum câteva dintre diferențele dintre HashSet și HashMap. De asemenea, vom discuta diferențele dintre HashSet și TreeSet.
HashSet Vs HashMap
Tabelul următor arată diferențele majore dintre HashSet și HashMap.
HashSet | HashMap |
---|---|
Obiectele sunt adăugate folosind metoda Add (). | HashMap folosește metoda put () pentru a adăuga perechi cheie-valoare. |
Implementează interfața Set. | Implementează interfața Hartă. |
Stochează obiecte de un anumit tip. | Stocați perechi de date cheie-valoare. |
Nu permite duplicarea valorilor obiectelor. | Permite valori duplicate, dar nu chei duplicate. |
Poate avea o singură valoare nulă. | Permite o singură cheie nulă și mai multe valori nule. |
Utilizează intern HashMap Object pentru stocarea datelor. | Folosește tehnica de hash pentru stocarea datelor. |
Este mai lent în comparație cu HashMap. | HashMap este mai rapid. |
HashSet Vs TreeSet
Mai jos sunt enumerate diferențele dintre HashSet și TreeSet.
HashSet | TreeSet |
---|---|
Are funcționalitate limitată. | Oferă funcții care pot oferi diverse operațiuni și facilitează utilizarea setului de arbori decât HashSet. |
Nu menține ordonarea elementelor. Stochează obiecte în ordine aleatorie. | Menține ordonarea naturală a elementelor. |
Permite valori nule. | Nu poate avea valori nule. |
Oferă performanțe mai bune, deoarece este nevoie de timp constant pentru operațiuni de bază. | Oferă jurnal n cost de timp pentru operațiuni de bază. |
Mult mai rapid decât Treeset. | Copacul este mai lent. |
Implementat intern folosind HashMap. | Treeset este implementat intern folosind Treemap navigabil. |
Folosește metoda equal () pentru comparație. | Folosește metoda compareTo () pentru comparație. |
întrebări frecvente
Q # 1) Cum funcționează HashSet în Java?
Răspuns: HashSet în Java folosește HashMap pentru a stoca obiectul. Un obiect HashMap este creat atunci când este creat un obiect HashSet. Elementele sau obiectele introduse în HashSet sunt stocate ca taste în HashMap.
Q # 2) HashSet este comandat în Java?
Răspuns: Nu, nu este comandat în Java. Stochează elemente în ordine aleatorie.
Î # 3) HashSet permite nul?
Răspuns: da, permite o singură valoare nulă. Aceasta înseamnă că doar un singur element sau obiect poate fi nul și nu toate.
Q # 4) De ce se folosește HashSet în Java?
Răspuns: Este folosit pentru a stoca perechi cheie-valoare în Java. Este similar cu HashTable cu excepția faptului că HashSet este nesincronizat și spre deosebire de HashTable permite valori nule și o singură cheie nulă. HashSet nu este comandat și poate fi utilizat pentru a stoca obiecte neordonate sau atunci când ordinea obiectelor nu este necesară.
Q # 5) HashSet este sincronizat în Java?
Răspuns: HashSet nu este sincronizat în Java. De asemenea, nu este sigur pentru fire. Dar îl putem face sincronizat folosind metoda synchronizedSet ().
Concluzie
HashSet este o colecție care conține obiecte care sunt în ordine aleatorie. Clasa HashSet care implementează HashSet în Java utilizează intern HashTable care implementează HashMap.
Am văzut declarația și inițializarea HashSet împreună cu metodele furnizate de clasa HashSet.
=> Citiți seria Easy Training Java.
Lectură recomandată
- Java Double - Tutorial cu exemple de programare
- Tutorial Java Float cu exemple de programare
- Java Reverse String: Tutorial cu exemple de programare
- TreeSet în Java: Tutorial cu exemple de programare
- Tutorial JAVA pentru începători: peste 100 de cursuri video Java practice
- Șirul Java conține () Tutorial metodă cu exemple
- TreeMap în Java - Tutorial cu exemple de TreeMap Java
- Matrice Jagged în Java - Tutorial cu exemple