
Java programátor expert
Java HashMap je jednou z množstva dátových štruktúr pre efektívnu prácu s údajmi. V našom seriáli si postupne predstavíme aj rôzne ďalšie kolekcie. Ukážeme si, ako s nimi pracovať, aké operácie sa s nimi dajú robiť či aké sú najčastejšie používané metódy. Spomenieme tiež ich výhody a nevýhody a kedy je vhodné konkrétnu dátovú štruktúru použiť.
V článku sa dozvieš:
V tomto článku sa zameriame na jednu z dátových štruktúr – triedu HashMap, ktorá umožňuje ukladanie dvojíc kľúč-hodnota a poskytuje rýchly prístup k hodnotám na základe kľúčov.
Java HashMap trieda je implementáciou rozhrania Map v balíku java.util. Umožňuje ukladanie dvojíc kľúč-hodnota, kde každý kľúč je unikátny a mapuje sa na konkrétnu hodnotu. Táto implementácia poskytuje všetky voliteľné operácie s mapou a povoľuje hodnoty null a kľúč null.
Trieda HashMap je približne ekvivalentná triede Hashtable, okrem toho, že je HashMap nesynchronizovaná a povoľuje nulové hodnoty. HashMap využíva hashovaciu tabuľku na ukladanie prvkov, čo zabezpečuje rýchle vyhľadávanie, vkladanie a odstraňovanie prvkov s priemernou časovou zložitosťou O(1). Je dôležité podotknúť, že HashMap neudržuje poradie vložených prvkov.
Na vytvorenie inštancie HashMap máme k dispozícií niekoľko konštruktorov:
1. Prázdna HashMap s predvolenou kapacitou a faktorom zaťaženia
Vytvorí prázdnu HashMap s predvolenou počiatočnou kapacitou (16) a faktorom zaťaženia (0.75).
HashMap<K, V> map = new HashMap<>();
2. HashMap s určenou počiatočnou kapacitou
Vytvorí prázdnu HashMap s určenou počiatočnou kapacitou a predvoleným faktorom zaťaženia (0.75).
HashMap<K, V> map = new HashMap<>(int initialCapacity);
3. HashMap s určenou počiatočnou kapacitou a faktorom zaťaženia
Vytvorí prázdnu HashMap s určenou počiatočnou kapacitou a faktorom zaťaženia.
HashMap<K, V> map = new HashMap<>(int initialCapacity, float loadFactor);
4. HashMap skonštruovaný z Map
Vytvorí novú hašovaciu tabuľku s rovnakým mapovaním ako daná Map.
HashMap(Map<? extends K,? extends V> m)
Týmto technickým pojmom spojených s vytvorením hashovacej mapy sme sa už venovali pri triede HashTable, preto ich tu nebudem opakovať.
Medzi základné operácie, ktoré môžeme vykonávať s HashMap, patria:
Kompletný prehľad metód triedy HashMap, nájdeš v oficiálnej dokumentácii.
Ak potrebuješ poradie, použi LinkedHashMap.
Ak potrebuješ synchronizovanú verziu, použi Collections.synchronizedMap(new HashMap<>()) alebo ConcurrentHashMap.
Java HashMap je vhodná v nasledovných prípadoch:
Naopak, nie je vhodná, ak potrebujeme zachovať poradie vložených prvkov. V takom prípade je lepšou voľbou LinkedHashMap.
HashMap vyniká efektívnym ukladaním dvojíc kľúč-hodnota a ich rýchlym vyhľadaním vďaka hashovacej metóde, keď ich potrebujeme načítať a použiť. Preto majú hashovacie mapy všestranné použitie.
Použitie kolekcie HashMap si ilustrujeme na príklade volieb. Zadefinujeme si zoznam kandidátov a pomocou metódy voting() budeme simulovať tajné hlasovanie. Dátovú štruktúru HashMap použijeme na spočítavanie hlasov, kde kľúč bude meno kandidáta a hodnota aktuálny počet hlasov. Nakoniec vypíšeme počet hlasov pre jednotlivých kandidátov.
VotingSystem.java
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.Arrays;
import java.util.Random;
public class VotingSystem {
public static void main(String[] args) {
// List of candidates
List<String> candidates = Arrays.asList("Alica", "Beata", "Cyril", "Dominik", "Jozef");
// Create a HashMap to store vote counts
HashMap<String, Integer> voteCounts = new HashMap<>();
// Run the voting simulation with N votes
int numberOfVotes = 1000; // Change this number for different simulation sizes
voting(voteCounts, candidates, numberOfVotes);
// Display final election results
System.out.println("Election results:");
for (Map.Entry<String, Integer> entry : voteCounts.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue() + " votes");
}
}
// Voting method that simulates N random votes
public static void voting(HashMap<String, Integer> voteCounts, List<String> candidates, int N) {
Random random = new Random();
for (int i = 0; i < N; i++) {
// Randomly select a candidate from the list
String selectedCandidate = candidates.get(random.nextInt(candidates.size()));
// Add vote to the candidate in HashMap
voteCounts.put(selectedCandidate, voteCounts.getOrDefault(selectedCandidate, 0) + 1);
}
}
}
Výstup z tohto príkladu je:
Pripravili sme pre teba súbory so spomínaným príkladom vo forme kódu, ktorý si môžeš spustiť priamo v Jave. Stiahni si Java kód pre HashMap tu.
Súvisiace články