hashset java tutorial with programming examples
Denna handledning förklarar vad som är HashSet i Java, HashSet-metoder, hur man implementerar och itererar genom det och andra relaterade koncept med hjälp av programmeringsexempel:
En HashSet är en samling som lagrar objekt. HashSet i Java implementeras med klassen 'HashSet' i paketet java.util.
Denna klass implementerar ett inställt gränssnitt. Den använder HashTable som är en HashMap-instans för lagring.
=> Ta en titt på Java-nybörjarguiden här.
Vad du kommer att lära dig:
Java HashSet
Några av egenskaperna hos HashSet ges nedan:
- Implementerar ett Set-gränssnitt som har HashTable som en intern struktur. HashTable är i sin tur en HashMap-instans.
- Det bevarar inte elementens ordning. Element lagras i slumpmässig ordning.
- HashSet tillåter inte dubbla värden.
- Implementerar ett klonabelt och serialiserbart gränssnitt förutom Set-gränssnittet.
- Vi kan ha nollvärden i HashSet.
HashSet klasshierarki
Hierarkin för HashSet-klassen ges nedan:
Som visas i ovanstående figur utökar HashSet-klassen AbstractSet-klassen som i sin tur implementerar Set-gränssnittet. Det inställda gränssnittet ärver samlingsgränssnittet som i sin tur utökar det interaktiva gränssnittet.
Java 8 release introducerade en ny metod 'Spliterator' i HashSet vilket skapar en felsnabb spliterator som utför senbindning över elementen i HashSet.
Den allmänna deklarationen för HashSet-klassen är:
offentlig klass HashSet utökar AbstractSet redskap Set,
Klonbar, Serialiserbar
Importera HashSet
Vi kan inkludera HashSet-funktionaliteten i programmet med hjälp av importförklaringen enligt nedan:
importera java.util.HashSet;
eller
importera java.util. *;
Förklara HashSet i Java
Vi kan skapa ett HashSet-objekt i Java enligt nedan:
HashSet h = ny HashSet ();
HashSet-klassen tillhandahåller följande konstruktörer för att skapa objekt.
Konstruktör prototyp | Beskrivning | |
---|---|---|
ta bort | Boolean ta bort (Objekt o) | Tar bort det givna elementet o från HashSet om det är en del av HashSet. |
HashSet () | Standardkonstruktör för HashSet | |
HashSet (int-kapacitet) | Konstruerar ett HashSet-objekt med den givna ”kapaciteten”. | |
HashSet (int-kapacitet, float loadFactor) | Konstruerar ett HashSet-objekt med den givna 'kapaciteten' och 'loadFactor'. | |
HashSet (samling c) | Konstruera ett HashSet-objekt från en given samling. |
Som visas i ovanstående tabell, förutom standardkonstruktören, ger denna klass också konstruktörer som tar kapacitet och belastningsfaktor och en annan samling som argument. Vi kan skapa objekt i denna klass med någon av dessa konstruktörer.
Initiera HashSet
Följande Java-kod visar deklarationen och initialiseringen av HashSet-klassobjektet. I det här programmet skapar vi ett HashSet-klassobjekt från en ArrayList. Inledningsvis skapar och initialiserar vi ArrayList och använder sedan ArrayList för att skapa och initialisera ett 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() + ' '); } } }
Produktion:
Hur fungerar HashSet internt i Java?
Internt implementeras den med en HashTable. HashTable är en instans av HashMap. Men HashMap är en samling nyckel-värdepar. Så hur lagrar vi HashSet i en HashMap?
Objektvärdena för HashSet är nycklarna till HashMap.
Java HashSet-exempel
Låt oss se ett detaljerat exempel 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() + ' '); } } }
Produktion:
Här använder vi standardkonstruktören för att skapa ett HashSet-objekt. Använd sedan add-metoden och lägg till element (färger) i HashSet. Därefter använder vi en iterator för att gå igenom HashSet och skriva ut innehållet.
HashSet Iterator
I Java kan HashSet korsas eller upprepas på två sätt som diskuteras nedan.
Utan att använda Iterator
Här definierar vi inte en iterator på HashSet. Istället använder vi en forEach-slinga. Följande program visar övergången av HashSet med hjälp av en forEach-slinga.
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 + ' '); } } }
Produktion:
Använda Iterator
Nästa metod för iterering är att använda en iterator. Här definierar vi en iterator för HashSet-klassen och går sedan igenom den.
Följande program visar detta tillvägagångssätt.
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() + ' '); } } }
Produktion:
HashSet-metoder / API
Följande tabell visar metoderna från HashSet-klassen. Vi har tillhandahållit prototypen och beskrivningen för varje metod. Som vi ser har vi metoder för grundläggande operationer som att lägga till, ta bort, storlek etc. samt för andra metoder för att kontrollera innehåll, tomhet, iterator, spliterator, etc.
Metod | Metodprototyp | Beskrivning |
---|---|---|
Lägg till | Boolean add (E e) | Lägger till givet element e till HashSet om det inte redan finns. |
klar | Utgår tydligt () | Rensar eller tar bort alla element från HashSet |
klona | Objektklon () | Den används för att returnera en grunt kopia av denna HashSet-instans: själva elementen klonas inte. |
innehåller | Boolean innehåller (Objekt o) | Kontrollerar om HashSet innehåller det givna objektet o och returnerar true om ja. |
är tom | Boolean isEmpty () | Kontrollerar om HashSet är tomt. Returnerar sant om ja. |
iterator | Iterator iterator () | Returnerar en iterator som används för att korsa HashSet. |
storlek | Int storlek () | Returnerar storleken eller antalet element som finns i HashSet. |
splitter | Spliterator spliterator () | Returnerar felsnabb och senbindande spliterator för att korsa HashSet. Denna metod introducerades i Java 8. |
Vi har beskrivit metoderna från HashSet-klassen, låt oss nu implementera ett exempel som visar de viktigaste metoderna i klassen.
Nedanstående Java-program visar metoderna i denna klass.
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); } }
Produktion:
Konvertera HashSet till Array
Vi kan använda metoden toArray () i HashSet för att konvertera den givna HashSet till en matris. Observera att datatypen och storleken på matrisen ska stämma överens med HashSet.
Följande Java-program visar denna konvertering.
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 + ' '); } } }
Produktion:
Sortera en HashSet
Vi kan sortera en HashSet i Java. HashSet-element sorteras inte ursprungligen eftersom de inte behåller ordningen på elementen. Vi kan följa två metoder för att sortera en HashSet i Java.
Använda Collections.sort () -metoden
I det här tillvägagångssättet konverterar vi HashSet till en lista. Sedan använder vi metoden Collections.sort () för att sortera listan. Listan skrivs sedan 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); } }
Produktion:
vad är skillnaden mellan vidarebefordran av port och utlösning av port
Genom att konvertera HashSet till TreeSet
Med den här metoden konverterar vi HashSet till TreeSet. TreeSet behåller ordningen på elementen. Därför när HashSet täcks över till TreeSet sätts elementen i ordning.
Följande Java-program visar denna konvertering och sorterar därmed 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); } }
Produktion:
Låt oss nu diskutera några av skillnaderna mellan HashSet och HashMap. Vi kommer också att diskutera skillnaderna mellan HashSet och TreeSet.
HashSet mot HashMap
Följande tabell visar de stora skillnaderna mellan HashSet och HashMap.
HashSet | HashMap |
---|---|
Objekt läggs till med metoden Lägg till (). | HashMap använder put () -metoden för att lägga till nyckel-värdepar. |
Redskap Ställ in gränssnitt. | Implementerar kartgränssnitt. |
Lagrar objekt av en viss typ. | Lagra data för nyckel-värde. |
Tillåter inte dubbletter av objekt. | Tillåter dubbla värden men inte dubbla nycklar. |
Kan ha ett enda nullvärde. | Tillåter enkel null-tangent och flera null-värden. |
Internt använder HashMap Object för lagring av data. | Använder hashingteknik för lagring av data. |
Är långsammare jämfört med HashMap. | HashMap är snabbare. |
HashSet vs TreeSet
Nedan listas skillnaderna mellan HashSet och TreeSet.
HashSet | TreeSet |
---|---|
Har begränsad funktionalitet. | Tillhandahåller funktioner som erbjuder olika funktioner och gör det enklare att använda Treeset än HashSet. |
Det upprätthåller inte elementordning. Lagrar objekt i slumpmässig ordning. | Bibehåller den naturliga ordningen av elementen. |
Det möjliggör nollvärden. | Det kan inte ha nollvärden. |
Ger bättre prestanda eftersom det tar konstant tid för grundläggande operationer. | Erbjuder loggtidskostnad för grundläggande operationer. |
Mycket snabbare än Treeset. | Treeset är långsammare. |
Internt implementerad med HashMap. | Treeset implementeras internt med hjälp av navigerbar Treemap. |
Använder lik () -metoden för jämförelse. | Använder jämförelsemetoden () för jämförelse. |
Vanliga frågor
F # 1) Hur fungerar HashSet i Java?
Svar: HashSet i Java använder HashMap för att lagra objektet. Ett HashMap-objekt skapas när ett HashSet-objekt skapas. Elementen eller objekten som matats in i HashSet lagras som nycklar i HashMap.
F # 2) Beställs HashSet i Java?
Svar: Nej, det är inte beställt i Java. Det lagrar element i slumpmässig ordning.
F # 3) Tillåter HashSet null?
Svar: ja, det tillåter ett enda nullvärde. Det betyder att endast ett enda element eller objekt kan vara noll och inte alla.
F # 4) Varför används HashSet i Java?
Svar: Den används för att lagra nyckel-värdepar i Java. Det liknar HashTable med undantag för att HashSet är osynkroniserat och till skillnad från HashTable tillåter det nollvärden och en enda nollnyckel. HashSet är inte beställt och kan användas för att lagra obeställda objekt eller när objekternas ordning inte krävs.
F # 5) Är HashSet synkroniserat i Java?
Svar: HashSet synkroniseras inte i Java. Det är inte heller trådsäkert. Men vi kan göra den synkroniserad med metoden synchronizedSet ().
Slutsats
HashSet är en samling som innehåller objekt som är i slumpmässig ordning. HashSet-klass som implementerar HashSet i Java internt använder HashTable som implementerar HashMap.
Vi såg deklarationen och initialiseringen av HashSet tillsammans med de metoder som tillhandahålls av HashSet-klassen.
=> Läs igenom Easy Java Training Series.
Rekommenderad läsning
- Java Double - Handledning med programmeringsexempel
- Java Float Tutorial med programmeringsexempel
- Java Reverse String: Handledning med programmeringsexempel
- TreeSet I Java: Handledning med programmeringsexempel
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Java String innehåller () Metodhandledning med exempel
- TreeMap In Java - Handledning med Java TreeMap-exempel
- Jagged Array In Java - Handledning med exempel