hashset java tutorial with programming examples
Denne vejledning forklarer, hvad der er HashSet i Java, HashSet-metoder, hvordan man implementerer og gentager det og andre relaterede koncepter ved hjælp af programmeringseksempler:
Et HashSet er en samling, der gemmer objekter. HashSet i Java implementeres ved hjælp af klassen 'HashSet' af java.util-pakken.
Denne klasse implementerer et sæt interface. Det bruger HashTable, som er en HashMap-instans til opbevaring.
=> Se på Java Beginners Guide her.
Hvad du lærer:
Java HashSet
Nogle af egenskaberne ved HashSet er angivet nedenfor:
- Implementerer et sæt-interface, der har HashTable som en intern struktur. HashTable er igen en HashMap-forekomst.
- Det bevarer ikke rækkefølgen af elementer. Elementerne gemmes i tilfældig rækkefølge.
- HashSet tillader ikke duplikatværdier.
- Implementerer en Cloneable og Serializable interface bortset fra Set interface.
- Vi kan have nulværdier i HashSet.
HashSet klassehierarki
Hierarkiet for HashSet-klassen er angivet nedenfor:
Som vist i ovenstående figur udvider HashSet-klassen AbstractSet-klassen, der igen implementerer Set-grænsefladen. Sætgrænsefladen arver samlingsgrænsefladen, der igen udvider den interterbare grænseflade.
Java 8-udgivelse introducerede en ny metode 'Spliterator' i HashSet, som opretter en fail-fast spliterator, der udfører sen binding over elementerne i HashSet.
Den generelle erklæring for HashSet-klassen er:
offentlig klasse HashSet udvider AbstractSet implementeringssæt,
Kan klones, kan serialiseres
Importer HashSet
Vi kan inkludere HashSet-funktionaliteten i programmet ved hjælp af importerklæringen som vist nedenfor:
importere java.util.HashSet;
eller
importer java.util. *;
Erklær HashSet i Java
Vi kan oprette et HashSet-objekt i Java som angivet nedenfor:
HashSet h = nyt HashSet ();
HashSet-klassen giver følgende konstruktører til at oprette objekter.
Konstruktør prototype | Beskrivelse | |
---|---|---|
fjerne | Boolsk fjernelse (Objekt o) | Fjerner det givne element o fra HashSet, hvis det er en del af HashSet. |
HashSet () | Standardkonstruktør til HashSet | |
HashSet (int kapacitet) | Konstruerer et HashSet-objekt med den givne 'kapacitet'. | |
HashSet (int-kapacitet, float loadFactor) | Konstruerer et HashSet-objekt med den givne 'kapacitet' og 'loadFactor'. | |
HashSet (samling c) | Konstruer et HashSet-objekt fra den givne samling. |
Som vist i ovenstående tabel giver denne klasse bortset fra standardkonstruktøren også de konstruktører, der tager kapacitet og belastningsfaktor og en anden samling som argumenter. Vi kan oprette objekterne i denne klasse ved hjælp af en hvilken som helst af disse konstruktører.
Initialiser HashSet
Den følgende Java-kode viser erklæringen og initialiseringen af HashSet-klasseobjektet. I dette program opretter vi et HashSet-klasseobjekt fra en ArrayList. Oprindeligt opretter og initialiserer vi ArrayList og bruger derefter denne ArrayList til at oprette 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() + ' '); } } }
Produktion:
Hvordan fungerer HashSet internt i Java?
Internt implementeres det ved hjælp af en HashTable. HashTable er en forekomst af HashMap. Men HashMap er en samling af nøgleværdipar. Så hvordan gemmer vi HashSet i et HashMap?
Objektværdierne for HashSet er nøglerne til HashMap.
Java HashSet-eksempel
Lad os se et detaljeret 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() + ' '); } } }
Produktion:
Her bruger vi standardkonstruktøren til at oprette et HashSet-objekt. Derefter tilføjer vi elementer (farver) til HashSet ved hjælp af tilføjelsesmetoden. Dernæst bruger vi en iterator til at krydse gennem HashSet og udskrive indholdet.
HashSet Iterator
I Java kan HashSet krydses eller gentages på to måder som beskrevet nedenfor.
Uden at bruge Iterator
Her definerer vi ikke en iterator på HashSet. I stedet bruger vi en forEach-løkke. Følgende program viser gennemgangen af HashSet ved hjælp af 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 + ' '); } } }
Produktion:
Brug af Iterator
Den næste tilgang til iterering er at bruge en iterator. Her definerer vi en iterator til HashSet-klassen og krydser derefter gennem den.
Følgende program viser denne tilgang.
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
Den følgende tabel viser metoderne fra HashSet-klassen. Vi har leveret prototypen og beskrivelsen til hver metode. Som set har vi metoder til grundlæggende operationer som tilføjelse, fjernelse, størrelse osv. Såvel som andre metoder til at kontrollere indhold, tomhed, iterator, spliterator osv.
Metode | Metode Prototype | Beskrivelse |
---|---|---|
tilføje | Boolsk tilføjelse (E e) | Føjer det givne element e til HashSet, hvis det ikke allerede er til stede. |
klar | Bortfalder klar () | Rydder eller fjerner alle elementer fra HashSet |
klon | Objektklon () | Det bruges til at returnere en lav kopi af denne HashSet-forekomst: selve elementerne klones ikke. |
indeholder | Boolsk indeholder (Objekt o) | Kontrollerer, om HashSet indeholder det givne objekt o og returnerer sandt, hvis ja. |
er tom | Boolsk er tom () | Kontrollerer, om HashSet er tomt. Returnerer sandt, hvis ja. |
iterator | Iterator iterator () | Returnerer en iterator, der bruges til at krydse HashSet. |
størrelse | Int-størrelse () | Returnerer størrelsen eller antallet af elementer, der findes i HashSet. |
splitter | Spliterator spliterator () | Returnerer fail-fast og sent-binding spliterator for at krydse HashSet. Denne metode blev introduceret i Java 8. |
Vi har beskrevet metoderne fra HashSet-klassen, lad os nu implementere et eksempel, der demonstrerer de vigtigste metoder i klassen.
Nedenstående Java-program demonstrerer metoderne i denne klasse.
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:
Konverter HashSet til Array
Vi kan bruge toArray () -metoden i HashSet til at konvertere den givne HashSet til en matrix. Bemærk, at datatypen og størrelsen på matrixen skal matche den for HashSet.
Følgende Java-program viser denne 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:
Sorter et hashsæt
Vi kan sortere et HashSet i Java. HashSet-elementer sorteres ikke oprindeligt, da de ikke opretholder rækkefølgen af elementer. Vi kan følge to tilgange til at sortere et HashSet i Java.
Brug af Collections.sort () -metoden
I denne tilgang konverterer vi HashSet til en liste. Derefter bruger vi metoden Collections.sort () til at sortere listen. Denne liste udskrives derefter.
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:
hvad er den bedste software til fjernelse af malware
Ved at konvertere HashSet til TreeSet
Ved hjælp af denne tilgang konverterer vi HashSet til TreeSet. TreeSet opretholder rækkefølgen af elementerne. Derfor, når HashSet er skjult til TreeSet, bringes elementerne i rækkefølge.
Følgende Java-program viser denne konvertering 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); } }
Produktion:
Lad os nu diskutere nogle af forskellene mellem HashSet og HashMap. Vi vil også diskutere forskellene mellem HashSet og TreeSet.
HashSet mod HashMap
Den følgende tabel viser de største forskelle mellem HashSet og HashMap.
HashSet | HashMap |
---|---|
Objekter tilføjes ved hjælp af Add () -metoden. | HashMap bruger put () -metoden til at tilføje nøgleværdipar. |
Redskaber Sæt interface. | Implementerer kortgrænseflade. |
Gemmer objekter af en bestemt type. | Gem nøgleværdipar af data. |
Tillader ikke duplikatværdier af objekter. | Tillader duplikatværdier, men ikke duplikatnøgler. |
Kan have en enkelt nulværdi. | Tillader enkelt nul-nøgle og flere nulværdier. |
Internt bruger HashMap Object til lagring af data. | Bruger hashing-teknik til lagring af data. |
Er langsommere sammenlignet med HashMap. | HashMap er hurtigere. |
HashSet vs TreeSet
Nedenfor er forskellene mellem HashSet og TreeSet.
HashSet | TreeSet |
---|---|
Har begrænset funktionalitet. | Tilbyder funktioner, der tilbyder forskellige operationer og gør det lettere at bruge Treeset end HashSet. |
Det opretholder ikke elementbestilling. Gemmer objekter i tilfældig rækkefølge. | Opretholder den naturlige rækkefølge af elementerne. |
Det giver mulighed for nulværdier. | Det kan ikke have nulværdier. |
Giver bedre ydeevne, da det tager konstant tid for grundlæggende operationer. | Tilbyder log n-tidsomkostninger til grundlæggende operationer. |
Meget hurtigere end Treeset. | Treeset er langsommere. |
Internt implementeret ved hjælp af HashMap. | Treeset implementeres internt ved hjælp af navigationsbart Treemap. |
Bruger lig () metode til sammenligning. | Bruger sammenligningsmetoden () til sammenligning. |
Ofte stillede spørgsmål
Q # 1) Hvordan fungerer HashSet i Java?
Svar: HashSet i Java bruger HashMap til at gemme objektet. Et HashMap-objekt oprettes, når et HashSet-objekt oprettes. Elementerne eller objekterne, der er indtastet i HashSet, gemmes som nøgler i HashMap.
Q # 2) Er HashSet bestilt i Java?
Svar: Nej, det er ikke bestilt i Java. Det gemmer elementer i tilfældig rækkefølge.
Q # 3) Tillader HashSet null?
Svar: ja, det tillader en enkelt nulværdi. Dette betyder, at kun et enkelt element eller objekt kan være nul og ikke alle.
Q # 4) Hvorfor bruges HashSet i Java?
Svar: Det bruges til at gemme nøgleværdipar i Java. Det svarer til HashTable med undtagelse af, at HashSet er usynkroniseret, og i modsætning til HashTable tillader det nulværdier og en enkelt nøgle. HashSet bestilles ikke og kan bruges til at gemme ikke-ordnede objekter, eller når rækkefølgen af objekterne ikke er påkrævet.
Q # 5) Er HashSet synkroniseret i Java?
Svar: HashSet er ikke synkroniseret i Java. Det er heller ikke trådsikkert. Men vi kan gøre det synkroniseret ved hjælp af metoden synchronizedSet ().
Konklusion
HashSet er en samling, der indeholder objekter, der er i tilfældig rækkefølge. HashSet-klasse, der implementerer HashSet i Java, bruger internt HashTable, der implementerer HashMap.
Vi så erklæringen og initialiseringen af HashSet sammen med metoderne leveret af HashSet-klassen.
=> Læs gennem Easy Java Training Series.
Anbefalet læsning
- Java Double - Vejledning med programmeringseksempler
- Java Float Tutorial med programmeringseksempler
- Java Reverse String: Tutorial med programmeringseksempler
- TreeSet I Java: Vejledning med programmeringseksempler
- JAVA-vejledning til begyndere: 100+ praktiske Java-videovejledninger
- Java String indeholder () Metodevejledning med eksempler
- TreeMap I Java - Vejledning med Java TreeMap-eksempler
- Jagged Array In Java - Vejledning med eksempler