hashset java tutorial with programming examples
Denne veiledningen forklarer hva som er HashSet i Java, HashSet-metoder, hvordan man implementerer og itererer det og andre relaterte konsepter ved hjelp av programmeringseksempler:
Et HashSet er en samling som lagrer objekter. HashSet i Java er implementert ved bruk av 'HashSet' klassen av java.util-pakken.
Denne klassen implementerer et angitt grensesnitt. Den bruker HashTable, som er en HashMap-forekomst for lagring.
=> Ta en titt på Java Beginners Guide her.
Hva du vil lære:
Java HashSet
Noen av egenskapene til HashSet er gitt nedenfor:
- Implementerer et settgrensesnitt som har HashTable som en intern struktur. HashTable er i sin tur en HashMap-forekomst.
- Det bevarer ikke rekkefølgen på elementene. Elementene lagres i tilfeldig rekkefølge.
- HashSet tillater ikke dupliserte verdier.
- Implementerer et klonabelt og serialiserbart grensesnitt bortsett fra Set-grensesnittet.
- Vi kan ha nullverdier i HashSet.
HashSet klassehierarki
Hierarkiet til HashSet-klassen er gitt nedenfor:
Som vist i figuren ovenfor, utvider HashSet-klassen AbstractSet-klassen som igjen implementerer Set-grensesnittet. Settgrensesnittet arver samlingsgrensesnittet som i sin tur utvider Iterable-grensesnittet.
Java 8-utgivelsen introduserte en ny metode 'Spliterator' i HashSet som skaper en mislykkes rask spliterator som utfører sen binding over elementene i HashSet.
Den generelle erklæringen til HashSet-klassen er:
offentlig klasse HashSet utvider AbstractSet implementeringssett,
Cloneable, Serializable
Importer HashSet
Vi kan inkludere HashSet-funksjonaliteten i programmet ved hjelp av importuttalelsen som vist nedenfor:
importere java.util.HashSet;
eller
importer java.util. *;
Erklær HashSet i Java
Vi kan opprette et HashSet-objekt i Java som gitt nedenfor:
HashSet h = ny HashSet ();
HashSet-klassen gir følgende konstruktører for å lage objekter.
Konstruktør prototype | Beskrivelse | |
---|---|---|
ta vekk | Boolsk fjerning (Objekt o) | Fjerner det gitte elementet o fra HashSet hvis det er en del av HashSet. |
HashSet () | Standardkonstruktør for HashSet | |
HashSet (int kapasitet) | Konstruerer et HashSet-objekt med gitt 'kapasitet'. | |
HashSet (int kapasitet, float loadFactor) | Konstruerer et HashSet-objekt med gitt 'kapasitet' og 'loadFactor'. | |
HashSet (samling c) | Konstruer et HashSet-objekt fra gitt samling. |
Som vist i tabellen ovenfor, bortsett fra standardkonstruktøren, gir denne klassen også konstruktørene som tar kapasitet og lastfaktor og en annen samling som argumenter. Vi kan lage objektene i denne klassen ved hjelp av noen av disse konstruktørene.
Initialiser HashSet
Følgende Java-kode viser erklæringen og initialiseringen av HashSet-klasseobjektet. I dette programmet lager vi et HashSet-klasseobjekt fra en ArrayList. Opprinnelig oppretter og initialiserer vi ArrayList og bruker deretter denne ArrayList til å opprette og initialisere et HashSet-objekt.
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() + ' '); } } }
Produksjon:
Hvordan fungerer HashSet internt i Java?
Internt implementeres den ved hjelp av en HashTable. HashTable er en forekomst av HashMap. Men HashMap er en samling nøkkelverdipar. Så hvordan lagrer vi HashSet i et HashMap?
Objektverdiene til HashSet er nøklene til HashMap.
Java HashSet-eksempel
La oss se et detaljert eksempel på HashSet i 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() + ' '); } } }
Produksjon:
Her bruker vi standardkonstruktøren til å lage et HashSet-objekt. Deretter legger vi til metoden vi legger til elementer (farger) i HashSet. Deretter bruker vi en iterator til å krysse gjennom HashSet og skrive ut innholdet.
HashSet Iterator
I Java kan HashSet krysses eller gjentas på to måter som diskutert nedenfor.
Uten å bruke Iterator
Her definerer vi ikke en iterator på HashSet. I stedet bruker vi en forEach-løkke. Det følgende programmet viser gjennomkjøringen av HashSet ved hjelp av en forEach-løkke.
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 + ' '); } } }
Produksjon:
Bruke Iterator
Den neste tilnærmingen til iterering er å bruke en iterator. Her definerer vi en iterator for HashSet-klassen og krysser deretter gjennom den.
Følgende program viser denne tilnærmingen.
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() + ' '); } } }
Produksjon:
HashSet-metoder / API
Tabellen nedenfor viser metodene som tilbys av HashSet-klassen. Vi har gitt prototypen og beskrivelsen for hver metode. Som sett har vi metoder for grunnleggende operasjoner som legge til, fjerne, størrelse osv. Så vel som for andre metoder for å sjekke om innhold, tomhet, iterator, spliterator, etc.
Metode | Metode Prototype | Beskrivelse |
---|---|---|
Legg til | Boolsk tillegg (E e) | Legger til gitt element e i HashSet hvis det ikke allerede er til stede. |
klar | Utgår klart () | Fjerner eller fjerner alle elementene fra HashSet |
klone | Objektklon () | Den brukes til å returnere en grunne kopi av denne HashSet-forekomsten: selve elementene blir ikke klonet. |
inneholder | Boolsk inneholder (Objekt o) | Sjekker om HashSet inneholder det gitte objektet o og returnerer sant hvis ja. |
er tom | Boolsk er tom () | Sjekker om HashSet er tomt. Returnerer sant hvis ja. |
iterator | Iterator iterator () | Returnerer en iterator som brukes til å krysse HashSet. |
størrelse | Int størrelse () | Returnerer størrelsen eller antallet elementer som er tilstede i HashSet. |
splitter | Spliterator spliterator () | Returnerer feilrask og senbindende spliterator for å krysse HashSet. Denne metoden ble introdusert i Java 8. |
Vi har beskrevet metodene som tilbys av HashSet-klassen. La oss nå implementere et eksempel som viser de viktigste metodene i klassen.
Java-programmet nedenfor viser metodene i denne klassen.
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); } }
Produksjon:
Konverter HashSet til Array
Vi kan bruke toArray () -metoden til HashSet for å konvertere den gitte HashSet til en matrise. Merk at datatypen og størrelsen på matrisen skal samsvare med HashSet.
Følgende Java-program viser denne konverteringen.
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 + ' '); } } }
Produksjon:
Sorter et hashsett
Vi kan sortere et HashSet i Java. HashSet-elementer sorteres ikke opprinnelig, da det ikke opprettholder rekkefølgen på elementene. Vi kan følge to tilnærminger for å sortere et HashSet i Java.
Ved hjelp av Collections.sort () -metoden
I denne tilnærmingen konverterer vi HashSet til en liste. Deretter bruker vi metoden Collections.sort () til å sortere listen. Denne listen skrives ut.
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); } }
Produksjon:
hva er forskjellen mellom port forwarding og port triggering
Ved å konvertere HashSet til TreeSet
Ved hjelp av denne tilnærmingen konverterer vi HashSet til TreeSet. TreeSet opprettholder rekkefølgen på elementene. Derfor når HashSet er skjult til TreeSet, blir elementene satt i rekkefølge.
Følgende Java-program viser denne konverteringen og sorterer dermed 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); } }
Produksjon:
La oss nå diskutere noen av forskjellene mellom HashSet og HashMap. Vi vil også diskutere forskjellene mellom HashSet og TreeSet.
HashSet mot HashMap
Tabellen nedenfor viser de største forskjellene mellom HashSet og HashMap.
HashSet | HashMap |
---|---|
Objekter legges til ved hjelp av Add () -metoden. | HashMap bruker put () -metoden for å legge til nøkkelverdipar. |
Redskaper Sett grensesnitt. | Implementerer kartgrensesnitt. |
Lagrer gjenstander av en bestemt type. | Lagre nøkkelverdipar med data. |
Tillater ikke dupliserte verdier av objekter. | Tillater dupliserte verdier, men ikke dupliserte nøkler. |
Kan ha en enkelt nullverdi. | Tillater enkel nullnøkkel og flere nullverdier. |
Internt bruker HashMap Object for lagring av data. | Bruker hashingteknikk for lagring av data. |
Er tregere sammenlignet med HashMap. | HashMap er raskere. |
HashSet vs TreeSet
Oppført nedenfor er forskjellene mellom HashSet og TreeSet.
HashSet | TreeSet |
---|---|
Har begrenset funksjonalitet. | Tilbyr funksjoner som tilbyr forskjellige operasjoner og gjør det enklere å bruke Treeset enn HashSet. |
Det opprettholder ikke elementbestilling. Lagrer objekter i tilfeldig rekkefølge. | Opprettholder den naturlige ordenen av elementene. |
Det tillater nullverdier. | Den kan ikke ha nullverdier. |
Gir bedre ytelse ettersom det tar konstant tid for grunnleggende operasjoner. | Tilbyr log n tidskostnad for grunnleggende operasjoner. |
Mye raskere enn Treeset. | Treeset er tregere. |
Internt implementert ved bruk av HashMap. | Treeset er implementert internt ved hjelp av navigerbart Treemap. |
Bruker lik () metode for sammenligning. | Bruker sammenligningsmetode () for sammenligning. |
ofte stilte spørsmål
Q # 1) Hvordan fungerer HashSet i Java?
Svar: HashSet i Java bruker HashMap til å lagre objektet. Ett HashMap-objekt opprettes når et HashSet-objekt opprettes. Elementene eller objektene som er angitt i HashSet, lagres som nøkler i HashMap.
Q # 2) Er HashSet bestilt i Java?
Svar: Nei, det er ikke bestilt i Java. Den lagrer elementer i tilfeldig rekkefølge.
Q # 3) Tillater HashSet null?
Svar: ja, det tillater en enkelt nullverdi. Dette betyr at bare et enkelt element eller objekt kan være null og ikke alle.
Q # 4) Hvorfor brukes HashSet i Java?
Svar: Den brukes til å lagre nøkkelverdipar i Java. Det ligner på HashTable med unntak av at HashSet er usynkronisert, og i motsetning til HashTable tillater det nullverdier og en enkelt nullnøkkel. HashSet er ikke bestilt og kan brukes til å lagre uordnede objekter, eller når rekkefølgen på objektene ikke er nødvendig.
Q # 5) Er HashSet synkronisert i Java?
Svar: HashSet er ikke synkronisert i Java. Dessuten er det ikke trådsikkert. Men vi kan gjøre det synkronisert ved hjelp av synchronizedSet () -metoden.
Konklusjon
HashSet er en samling som inneholder objekter som er i tilfeldig rekkefølge. HashSet-klassen som implementerer HashSet i Java internt, bruker HashTable som implementerer HashMap.
Vi så erklæringen og initialiseringen av HashSet sammen med metodene som ble gitt av HashSet-klassen.
=> Les gjennom Easy Java Training Series.
Anbefalt lesing
- Java Double - Veiledning med programmeringseksempler
- Java Float Tutorial med programmeringseksempler
- Java omvendt streng: opplæring med programmeringseksempler
- TreeSet I Java: Opplæring med programmeringseksempler
- JAVA-opplæring for nybegynnere: 100+ praktiske Java-videoveiledninger
- Java String inneholder () Metodeopplæring med eksempler
- TreeMap In Java - Veiledning med Java TreeMap-eksempler
- Jagged Array In Java - Opplæring med eksempler