Uvod u mape
U programiranju, mape su fundamentalne strukture podataka koje omogućavaju skladištenje i upravljanje parovima ključ-vrednost. U Javi, mape su definisane interfejsom Map<K, V>
, gde K
predstavlja tip ključa, a V
tip vrednosti. Ove strukture omogućavaju brz pristup i pretragu vrednosti na osnovu njihovih ključeva, što ih čini ključnim u raznim aplikacijama kao što su keširanje, indeksiranje i pretraživanje informacija.
Ovaj sveobuhvatni vodič detaljno objašnjava korišćenje mapa u Javi, od jednostavnih operacija do naprednih tehnika. Počećemo sa pregledom interfejsa Map<K, V>
, a zatim ćemo praktično demonstrirati kako kreirati, popunjavati, pristupiti i modifikovati mape.
Osnovni koncept mapa
Mape predstavljaju kolekciju jedinstvenih parova ključ-vrednost. Ključevi služe za identifikaciju specifičnih vrednosti, a vrednosti su povezane sa odgovarajućim ključevima. Primera radi, u mapi gde su ključevi imena učenika, a vrednosti njihove prosečne ocene, možemo brzo doći do proseka bilo kog učenika jednostavnim korišćenjem njegovog imena kao ključa.
Kreiranje mapa
Postoji nekoliko načina za kreiranje mapa u Javi, a najčešći je korišćenje implementacije HashMap<K, V>
:
Map<String, Integer> oceneUcenika = new HashMap<>();
Ovim kodom kreiramo novu, praznu mapu koja koristi String
kao tip ključa i Integer
kao tip vrednosti. Pored HashMap
, postoje i druge implementacije mapa kao što su TreeMap<K, V>
, koja sortira ključeve, i ConcurrentHashMap<K, V>
, koja je bezbedna za istovremeni pristup.
Popunjavanje mape
Kada kreiramo mapu, potrebno je da je popunimo parovima ključ-vrednost. To se postiže metodom put(K key, V value)
:
oceneUcenika.put("Petar Petrović", 90);
oceneUcenika.put("Marija Jovanović", 85);
oceneUcenika.put("Jovan Simić", 95);
Ovaj kod dodaje tri para u mapu, pri čemu su ključevi imena učenika, a vrednosti njihove prosečne ocene.
Pristup vrednostima mape
Za pristup vrednostima u mapi koristi se metoda get(K key)
, koja vraća vrednost povezanu sa datim ključem, ili null
ako ključ ne postoji u mapi:
int petrovaOcena = oceneUcenika.get("Petar Petrović");
System.out.println(petrovaOcena); //90
Iteracija kroz mapu
Da bismo prošli kroz mapu i pristupili svim parovima ključ-vrednost, koristimo metodu entrySet()
. Ona vraća skup (Set) svih unosa (entiteta) mape, gde je svaki entitet tipa Map.Entry<K, V>
:
for (Map.Entry<String, Integer> unos : oceneUcenika.entrySet()) {
String imeUcenika = unos.getKey();
int ocenaUcenika = unos.getValue();
System.out.println(imeUcenika + ": " + ocenaUcenika);
}
Uklanjanje elemenata iz mape
Za uklanjanje elementa iz mape, koristi se metoda remove(K key)
. Ona uklanja par sa datim ključem iz mape i vraća vrednost tog para ili null
ako ključ nije postojao:
oceneUcenika.remove("Marija Jovanović");
Korisne metode mapa
Pored osnovnih operacija, interfejs Map<K, V>
nudi brojne korisne metode, uključujući:
size()
: Vraća broj parova u mapi.isEmpty()
: Vraćatrue
ako je mapa prazna, inačefalse
.containsKey(K key)
: Vraćatrue
ako mapa sadrži par sa datim ključem, inačefalse
.containsValue(V value)
: Vraćatrue
ako mapa sadrži barem jedan par sa datom vrednošću, inačefalse
.putAll(Map<? extends K, ? extends V> m)
: Dodaje sve parove iz date mape u trenutnu mapu.
Zaključak
U ovom tekstu, detaljno smo proučili korišćenje mapa u Javi, pokrivši osnovne operacije poput kreiranja, popunjavanja i pristupanja vrednostima, kao i naprednije tehnike poput iteracije i uklanjanja elemenata. Takođe smo pogledali korisne metode koje nudi interfejs Map<K, V>
.
Mape su moćna struktura podataka koja se može koristiti u različitim scenarijima. Njihova efikasnost i jednostavnost korišćenja ih čine neophodnim za mnoge Java aplikacije. Povećavanjem znanja o mapama, unapređujemo efikasnost i funkcionalnost naših Java programa.
Najčešća pitanja
1. Koje su osnovne razlike između HashMap<K, V>
i TreeMap<K, V>
?
– HashMap
je brza i nesortirana, dok TreeMap
sortira ključeve.
2. Da li mape u Javi čuvaju duplikate ključeva?
– Ne, mape čuvaju jedinstvene ključeve, što znači da ne mogu imati više parova sa istim ključem.
3. Kako mogu sortirati mapu po vrednostima?
– Možemo koristiti klasu TreeMap<K, V>
ili sortirati listu vrednosti iz kolekcije entiteta mape.
4. Da li mape u Javi održavaju redosled unosa?
– Ne, mape ne održavaju redosled unosa, osim ako ne koristimo povezanu implementaciju kao što je LinkedHashMap<K, V>
.
5. Kako mogu proveriti da li mapa ima određenu vrednost?
– Možemo koristiti metodu containsValue(V value)
da proverimo da li mapa sadrži par sa datom vrednošću.
6. Da li su mape u Javi bezbedne za istovremeni pristup?
– Mape nisu bezbedne za istovremeni pristup po osnovnom podešavanju. Ako je potrebna bezbednost pri istovremenom pristupu, koristi se ConcurrentHashMap<K, V>
.
7. Možemo li iterirati samo kroz ključeve mape?
– Da, možemo koristiti metodu keySet()
da dobijemo skup ključeva i iteriramo kroz njega.
8. Kako mogu prebaciti mapu u listu parova ključ-vrednost?
– Možemo koristiti entrySet().stream().toList()
da prebacimo mapu u listu entiteta, a zatim mapirati te entitete na parove ključ-vrednost.