hashset java tutorial with programming examples
Aquest tutorial explica què és HashSet a Java, els mètodes HashSet, com implementar-lo i iterar-lo i altres conceptes relacionats amb l'ajuda d'exemples de programació:
Un HashSet és una col·lecció que emmagatzema objectes. El HashSet a Java s’implementa mitjançant la classe ‘HashSet’ del paquet java.util.
Aquesta classe implementa una interfície establerta. Utilitza HashTable, que és una instància de HashMap per emmagatzemar.
=> Feu una ullada a la guia per a principiants de Java aquí.
Què aprendreu:
- Java HashSet
- HashSet Vs HashMap
- HashSet Vs TreeSet
- Conclusió
Java HashSet
A continuació es detallen algunes de les característiques de HashSet:
- Implementa una interfície Set que té HashTable com a estructura interna. HashTable, al seu torn, és una instància de HashMap.
- No preserva l'ordre dels elements. Els elements s’emmagatzemen en ordre aleatori.
- HashSet no permet valors duplicats.
- Implementa una interfície Clonable i Serializable a part de la interfície Set.
- Podem tenir valors nuls a HashSet.
Jerarquia de classes HashSet
A continuació es mostra la jerarquia de la classe HashSet:
Com es mostra a la figura anterior, la classe HashSet amplia la classe AbstractSet que al seu torn implementa la interfície Set. La interfície configurada hereta la interfície de col·lecció que, al seu torn, amplia la interfície Iterable.
La versió de Java 8 va introduir un nou mètode 'Spliterator' a HashSet que crea un divisor de fallades que realitza un enllaç tardà sobre els elements del HashSet.
La declaració general de la classe HashSet és:
HashSet de classe pública amplia AbstractSet implementa el conjunt,
Clonable, serialitzable
Importa HashSet
Podem incloure la funcionalitat HashSet al programa mitjançant la declaració d’importació que es mostra a continuació:
import java.util.HashSet;
o bé
import java.util. *;
Declareu HashSet a Java
Podem crear un objecte HashSet a Java tal i com es mostra a continuació:
HashSet h = HashSet nou ();
La classe HashSet proporciona els següents constructors per crear objectes.
Prototip de constructor | Descripció | |
---|---|---|
eliminar | Eliminació booleana (objecte o) | Elimina l'element o del HashSet si forma part del HashSet. |
HashSet () | Constructor per defecte per a HashSet | |
HashSet (capacitat int) | Construeix un objecte HashSet amb la 'capacitat' determinada. | |
HashSet (capacitat int, factor de càrrega flotant) | Construeix un objecte HashSet amb la 'capacitat' i el 'loadFactor' donats. | |
HashSet (col·lecció c) | Construeix un objecte HashSet a partir d'una col·lecció donada. |
Com es mostra a la taula anterior, a part del constructor per defecte, aquesta classe també proporciona els constructors que prenen capacitat i loadfactor i una altra col·lecció com a arguments. Podem crear els objectes d’aquesta classe amb qualsevol d’aquests constructors.
Inicialitzeu HashSet
El següent codi Java mostra la declaració i la inicialització de l'objecte de classe HashSet. En aquest programa, creem un objecte de classe HashSet a partir d’una ArrayList. Inicialment, creem i inicialitzem ArrayList i després l’utilitzem per crear i inicialitzar un objecte 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() + ' '); } } }
Sortida:
Com funciona HashSet internament a Java?
Internament, s’implementa mitjançant un HashTable. HashTable és una instància de HashMap. Però HashMap és una col·lecció de parells valor-clau. Llavors, com emmagatzemem HashSet en un HashMap?
Els valors d'objecte de HashSet són les claus del HashMap.
Exemple de Java HashSet
Vegem un exemple detallat de HashSet a 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() + ' '); } } }
Sortida:
Aquí, fem servir el constructor per defecte per crear un objecte HashSet. A continuació, mitjançant el mètode add, afegim elements (colors) al HashSet. A continuació, fem servir un iterador per recórrer el HashSet i imprimir el contingut.
HashSet Iterator
A Java, HashSet es pot transmetre o iterar de dues maneres, tal com es descriu a continuació.
Sense fer servir Iterator
Aquí no definim un iterador al HashSet. En el seu lloc, fem servir un bucle forEach. El programa següent mostra el recorregut de HashSet mitjançant un bucle 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 + ' '); } } }
Sortida:
Utilitzant Iterator
El següent enfocament de la iteració és utilitzar un iterador. Aquí, definim un iterador per a la classe HashSet i després el travessem.
El programa següent mostra aquest enfocament.
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() + ' '); } } }
Sortida:
Mètodes / API HashSet
La taula següent mostra els mètodes proporcionats per la classe HashSet. Hem proporcionat el prototip i la descripció de cada mètode. Com es va veure, tenim mètodes per a operacions bàsiques com afegir, eliminar, mida, etc., així com per a altres mètodes per comprovar si hi ha contingut, buit, iterador, divisor, etc.
Mètode | Mètode prototip | Descripció |
---|---|---|
afegir | Afegiment booleà (E e) | Afegeix l'element donat e al HashSet si encara no està present. |
clar | Buit clar () | Esborra o elimina tots els elements del HashSet |
clonar | Clon d'objectes () | S'utilitza per retornar una còpia poc profunda d'aquesta instància de HashSet: els elements en si no estan clonats. |
conté | Booleà conté (objecte o) | Comprova si el HashSet conté l’objecte donat o i torna si és veritable. |
està buit | Booleà isEmpty () | Comprova si el HashSet està buit. Retorna cert si és afirmatiu. |
iterador | Iterador iterador () | Retorna un iterador que s'utilitza per recórrer el HashSet. |
mida | Mida int () | Retorna la mida o el nombre d'elements presents al HashSet. |
divisor | Spliterator spliterator () | Retorna el divisor d'unió ràpida i tardana per travessar el HashSet. Aquest mètode es va introduir a Java 8. |
Hem descrit els mètodes proporcionats per la classe HashSet; ara implementem un exemple que demostri els mètodes principals de la classe.
El programa Java següent mostra els mètodes d’aquesta classe.
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); } }
Sortida:
Converteix HashSet en matriu
Podem utilitzar el mètode toArray () de HashSet per convertir el HashSet donat a una matriu. Tingueu en compte que el tipus de dades i la mida de la matriu haurien de coincidir amb la de HashSet.
El següent programa Java mostra aquesta conversió.
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 + ' '); } } }
Sortida:
Ordeneu un HashSet
Podem ordenar un HashSet a Java. Els elements HashSet no s’ordenen originalment, ja que no mantenen l’ordre dels elements. Podem seguir dos enfocaments per ordenar un HashSet a Java.
Mitjançant el mètode Collections.sort ()
En aquest enfocament, convertim el HashSet en una llista. A continuació, fem servir el mètode Collections.sort () per ordenar la llista. A continuació, s'imprimeix aquesta llista.
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); } }
Sortida:
preguntes i respostes de l'entrevista angular js
En convertir HashSet a TreeSet
Mitjançant aquest enfocament convertim el HashSet a TreeSet. TreeSet manté l'ordre dels elements. Per tant, quan el HashSet es converteix en TreeSet, els elements es posen en ordre.
El següent programa Java mostra aquesta conversió ordenant així el 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); } }
Sortida:
Analitzem ara algunes de les diferències entre HashSet i HashMap. També parlarem de les diferències entre HashSet i TreeSet.
HashSet Vs HashMap
La taula següent mostra les principals diferències entre HashSet i HashMap.
HashSet | HashMap |
---|---|
Els objectes s’afegeixen mitjançant el mètode Add (). | HashMap utilitza el mètode put () per afegir parells clau-valor. |
Implementa la interfície del conjunt. | Implementa la interfície del mapa. |
Emmagatzema objectes d'un tipus concret. | Emmagatzemeu parells de dades clau-valor. |
No permet duplicar els valors dels objectes. | Permet valors duplicats però no claus duplicades. |
Pot tenir un valor nul. | Permet una clau nul·la única i diversos valors nuls. |
Utilitza internament HashMap Object per emmagatzemar dades. | Utilitza la tècnica de hash per emmagatzemar dades. |
És més lent en comparació amb HashMap. | HashMap és més ràpid. |
HashSet Vs TreeSet
A continuació es detallen les diferències entre HashSet i TreeSet.
HashSet | Conjunt d'arbres |
---|---|
Té una funcionalitat limitada. | Proporciona funcions que poden oferir diverses operacions i faciliten l'ús de Treeset que HashSet. |
No manté l’ordenació d’elements. Emmagatzema objectes en ordre aleatori. | Manté l’ordenació natural dels elements. |
Permet valors nuls. | No pot tenir valors nuls. |
Ofereix un millor rendiment, ja que es necessita un temps constant per a les operacions bàsiques. | Ofereix un registre de temps per a operacions bàsiques. |
Molt més ràpid que Treeset. | El conjunt d’arbres és més lent. |
Implementat internament mitjançant HashMap. | El conjunt d’arbres s’implementa internament mitjançant Treemap navegable. |
Utilitza el mètode equals () per a la comparació. | Utilitza el mètode compareTo () per a la comparació. |
Preguntes freqüents
P # 1) Com funciona HashSet a Java?
Resposta: HashSet a Java utilitza HashMap per emmagatzemar l'objecte. Un objecte HashMap es crea quan es crea un objecte HashSet. Els elements o objectes introduïts al HashSet s’emmagatzemen com a claus al HashMap.
P # 2) HashSet està ordenat a Java?
Resposta: No, no està ordenat a Java. Emmagatzema elements en ordre aleatori.
P # 3) HashSet permet que sigui nul?
Resposta: Sí, permet un únic valor nul. Això significa que només un sol element o objecte pot ser nul i no tots.
Q # 4) Per què s'utilitza HashSet a Java?
Resposta: S'utilitza per emmagatzemar parells clau-valor a Java. És similar a HashTable amb l'excepció que HashSet no està sincronitzat i, a diferència de HashTable, permet valors nuls i una sola clau nul·la. HashSet no està ordenat i es pot utilitzar per emmagatzemar objectes no ordenats o quan no es requereix l'ordre dels objectes.
P # 5) HashSet està sincronitzat a Java?
Resposta: El HashSet no està sincronitzat a Java. A més, no és apta per a fils. Però el podem sincronitzar mitjançant el mètode synchronizedSet ().
Conclusió
HashSet és una col·lecció que conté objectes en ordre aleatori. La classe HashSet que implementa HashSet a Java utilitza internament HashTable que implementa HashMap.
Vam veure la declaració i inicialització de HashSet juntament amb els mètodes proporcionats per la classe HashSet.
=> Llegiu la sèrie de formació Java fàcil.
Lectura recomanada
- Java Double - Tutorial amb exemples de programació
- Tutorial Java Float amb exemples de programació
- Java Reverse String: Tutorial amb exemples de programació
- TreeSet a Java: tutorial amb exemples de programació
- Tutorial JAVA per a principiants: més de 100 tutorials pràctics de vídeo Java
- Java String conté () Tutorial de mètode amb exemples
- TreeMap a Java: tutorial amb exemples de Java TreeMap
- Matriu dentada a Java: tutorial amb exemples