hashset java tutorial with programming examples
Tento výukový program vysvětluje, co je HashSet v Javě, metody HashSet, jak jej implementovat a iterovat a další související koncepty pomocí příkladů programování:
HashSet je kolekce, která ukládá objekty. HashSet v Javě je implementován pomocí třídy ‚HashSet 'balíčku java.util.
Tato třída implementuje nastavené rozhraní. Využívá HashTable, což je instance HashMap pro úložiště.
=> Prohlédněte si příručku Java Beginners Guide zde.
Co se naučíte:
Sada Java HashSet
Některé z charakteristik HashSet jsou uvedeny níže:
- Implementuje rozhraní Set, které má HashTable jako vnitřní strukturu. HashTable je zase instance HashMap.
- Nezachovává pořadí prvků. Prvky jsou ukládány v náhodném pořadí.
- HashSet neumožňuje duplicitní hodnoty.
- Implementuje klonovatelné a serializovatelné rozhraní kromě rozhraní sady.
- V HashSetu můžeme mít nulové hodnoty.
Hierarchie tříd HashSet
Hierarchie třídy HashSet je uvedena níže:
Jak je znázorněno na výše uvedeném obrázku, třída HashSet rozšiřuje třídu AbstractSet, která zase implementuje rozhraní Set. Nastavené rozhraní dědí rozhraní Collection, které zase rozšiřuje Iterable interface.
Vydání Java 8 představilo novou metodu ‚Spliterator ' v HashSet, který vytváří rychlou spliterátor, který provádí pozdní vazbu přes prvky HashSet.
Obecná deklarace třídy HashSet je:
veřejná třída HashSet rozšiřuje AbstractSet implementuje Set,
Cloneable, Serializable
Importovat HashSet
Funkci HashSet můžeme do programu zahrnout pomocí příkazu import, jak je uvedeno níže:
import java.util.HashSet;
nebo
import java.util. *;
Deklarovat HashSet v Javě
Můžeme vytvořit objekt HashSet v Javě, jak je uvedeno níže:
HashSet h = nový HashSet ();
Třída HashSet poskytuje následující konstruktory pro vytváření objektů.
Prototyp konstruktéra | Popis | |
---|---|---|
odstranit | Boolean remove (Objekt o) | Odebere daný prvek o z HashSet, pokud je součástí HashSet. |
HashSet () | Výchozí konstruktor pro HashSet | |
HashSet (int kapacita) | Vytvoří objekt HashSet s danou „kapacitou“. | |
HashSet (int kapacita, float loadFactor) | Vytvoří objekt HashSet s danou „kapacitou“ a „loadFactor“. | |
HashSet (kolekce c) | Vytvořte objekt HashSet z dané kolekce. |
Jak je znázorněno ve výše uvedené tabulce, kromě výchozího konstruktoru tato třída také poskytuje konstruktory, které berou kapacitu a loadfactor a jinou kolekci jako své argumenty. Můžeme vytvořit objekty této třídy pomocí kteréhokoli z těchto konstruktorů.
Inicializovat HashSet
Následující kód Java ukazuje deklaraci a inicializaci objektu třídy HashSet. V tomto programu vytvoříme objekt třídy HashSet z ArrayList. Zpočátku vytvoříme a inicializujeme ArrayList a poté použijeme tento ArrayList k vytvoření a inicializaci objektu 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() + ' '); } } }
Výstup:
Jak funguje HashSet interně v Javě?
Interně se implementuje pomocí HashTable. HashTable je instance HashMap. Ale HashMap je kolekce párů klíč – hodnota. Jak tedy uložíme HashSet do HashMap?
Hodnoty objektu HashSet jsou klíče k HashMap.
Příklad Java HashSet
Podívejme se na podrobný příklad HashSet v Javě.
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() + ' '); } } }
Výstup:
Zde používáme výchozí konstruktor k vytvoření objektu HashSet. Poté pomocí metody přidání přidáme prvky (barvy) do sady HashSet. Dále použijeme iterátor pro procházení HashSet a tisk obsahu.
HashSet Iterator
V Javě lze HashSet procházet nebo iterovat dvěma způsoby, jak je popsáno níže.
Bez použití Iterátoru
Tady v HashSet nedefinujeme iterátor. Místo toho používáme smyčku forEach. Následující program ukazuje procházení HashSet pomocí smyčky 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 + ' '); } } }
Výstup:
Používání Iterátoru
Dalším přístupem k iteraci je použití iterátoru. Zde definujeme iterátor pro třídu HashSet a poté procházíme.
Následující program ukazuje tento přístup.
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() + ' '); } } }
Výstup:
Metody HashSet / API
V následující tabulce jsou uvedeny metody poskytované třídou HashSet. Pro každou metodu jsme poskytli prototyp a popis. Jak je vidět, máme metody pro základní operace, jako je přidání, odebrání, velikost atd., Jakož i pro jiné metody pro kontrolu obsahu, prázdnoty, iterátoru, rozdělovače atd.
Metoda | Metoda Prototyp | Popis |
---|---|---|
přidat | Booleovský doplněk (E e) | Přidá daný prvek e do HashSet, pokud již není přítomen. |
Průhledná | Prázdné místo () | Vymaže nebo odebere všechny prvky z HashSet |
klon | Klon objektu () | Používá se k vrácení mělké kopie této instance HashSet: samotné prvky nejsou klonovány. |
obsahuje | Boolean obsahuje (Objekt o) | Zkontroluje, zda HashSet obsahuje daný objekt o a vrátí true, pokud ano. |
je prázdný | Boolean isEmpty () | Zkontroluje, zda je HashSet prázdný. Vrátí true, pokud ano. |
iterátor | Iterátor iterátor () | Vrátí iterátor, který se používá k procházení HashSet. |
velikost | Velikost int () | Vrátí velikost nebo počet prvků přítomných v HashSet. |
rozdělovač | Spliterator spliterator () | Vrátí rychlou poruchu a rozdělovač s pozdní vazbou k procházení HashSet. Tato metoda byla zavedena v prostředí Java 8. |
Popsali jsme metody poskytované třídou HashSet, nyní pojďme implementovat příklad, který ukazuje hlavní metody třídy.
Níže uvedený program Java demonstruje metody této třídy.
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); } }
Výstup:
Převést HashSet na pole
Můžeme použít metodu toArray () HashSet k převodu dané HashSet na pole. Všimněte si, že datový typ a velikost pole by se měly shodovat s daty a velikostí pole HashSet.
Následující program Java ukazuje tuto konverzi.
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 + ' '); } } }
Výstup:
Seřadit sadu hash
Můžeme třídit HashSet v Javě. Prvky HashSet nejsou původně seřazeny, protože neudržuje pořadí prvků. Můžeme postupovat dvěma způsoby, jak třídit HashSet v Javě.
Použití metody Collections.sort ()
V tomto přístupu převedeme HashSet na seznam. Potom použijeme k seřazení seznamu metodu Collections.sort (). Tento seznam se poté vytiskne.
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); } }
Výstup:
jak psát příběhy uživatelů a kritéria přijetí
Převedením HashSet na TreeSet
Pomocí tohoto přístupu převedeme HashSet na TreeSet. TreeSet udržuje pořadí prvků. Proto když je HashSet zakrytý na TreeSet, prvky se dají do pořádku.
Následující program Java ukazuje tuto konverzi, čímž třídí 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); } }
Výstup:
Pojďme nyní probrat některé rozdíly mezi HashSet a HashMap. Budeme také diskutovat o rozdílech mezi HashSet a TreeSet.
HashSet Vs HashMap
Následující tabulka ukazuje hlavní rozdíly mezi HashSet a HashMap.
HashSet | HashMap |
---|---|
Objekty se přidávají pomocí metody Add (). | HashMap používá metodu put () k přidávání párů klíč – hodnota. |
Implementuje rozhraní Set. | Implementuje rozhraní mapy. |
Ukládá objekty konkrétního typu. | Ukládejte páry klíč – hodnota dat. |
Nepovoluje duplicitní hodnoty objektů. | Umožňuje duplicitní hodnoty, ale ne duplicitní klíče. |
Může mít jednu nulovou hodnotu. | Umožňuje jeden nulový klíč a více nulových hodnot. |
Interně používá HashMap Object pro ukládání dat. | Používá hashovací techniku pro ukládání dat. |
Je pomalejší ve srovnání s HashMap. | HashMap je rychlejší. |
Sada stromů HashSet vs.
Níže jsou uvedeny rozdíly mezi HashSet a TreeSet.
HashSet | Sada stromů |
---|---|
Má omezenou funkčnost. | Poskytuje funkce května, které nabízejí různé operace a usnadňují používání Treeset než HashSet. |
Neudržuje řazení prvků. Ukládá objekty v náhodném pořadí. | Udržuje přirozené uspořádání prvků. |
Umožňuje nulové hodnoty. | Nemůže mít nulové hodnoty. |
Poskytuje lepší výkon, protože základní operace vyžadují neustálý čas. | Nabídky zaznamenávají časové náklady na základní operace. |
Mnohem rychlejší než Treeset. | Stromová sada je pomalejší. |
Interně implementováno pomocí HashMap. | Treeset je interně implementován pomocí splavné Treemap. |
Pro srovnání používá metodu equals (). | Pro porovnání používá metodu compareTo (). |
Často kladené otázky
Otázka č. 1) Jak funguje HashSet v Javě?
Odpovědět: HashSet v Javě používá HashMap k uložení objektu. Jeden objekt HashMap je vytvořen při vytvoření objektu HashSet. Prvky nebo objekty zadané v HashSet jsou uloženy jako klíče v HashMap.
Otázka 2) Je HashSet objednán v Javě?
Odpovědět: Ne, není objednáno v Javě. Ukládá prvky v náhodném pořadí.
Otázka č. 3) Umožňuje HashSet null?
Odpovědět: ano, umožňuje jednu nulovou hodnotu. To znamená, že pouze jeden prvek nebo objekt může mít hodnotu null a ne všechny.
Otázka č. 4) Proč se HashSet používá v Javě?
Odpovědět: Používá se k ukládání párů klíč – hodnota v Javě. Je to podobné jako HashTable s výjimkou, že HashSet je nesynchronizovaný a na rozdíl od HashTable umožňuje hodnoty null a jeden klíč null. HashSet není objednán a lze jej použít k ukládání neuspořádaných objektů nebo když není požadováno pořadí objektů.
Otázka č. 5) Je HashSet synchronizován v Javě?
Odpovědět: HashSet není v Javě synchronizován. Také to není bezpečné pro vlákna. Ale můžeme to synchronizovat pomocí metody synchronizedSet ().
Závěr
HashSet je kolekce obsahující objekty, které jsou v náhodném pořadí. Třída HashSet, která implementuje HashSet v Javě interně, používá HashTable, která implementuje HashMap.
Viděli jsme deklaraci a inicializaci HashSet spolu s metodami poskytovanými třídou HashSet.
=> Přečtěte si řadu Easy Java Training Series.
Doporučené čtení
- Výukový program Java s příklady programování
- Výukový program Java Float s příklady programování
- Reverzní řetězec Java: Výukový program s příklady programování
- TreeSet v Javě: Výukový program s příklady programování
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video
- Java String obsahuje () Výukový program metod s příklady
- TreeMap v Javě - výuka s příklady Java TreeMap
- Jagged Array In Java - výukový program s příklady