Како користити мапе у Јави

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ća true ako je mapa prazna, inače false.
  • containsKey(K key): Vraća true ako mapa sadrži par sa datim ključem, inače false.
  • containsValue(V value): Vraća true ako mapa sadrži barem jedan par sa datom vrednošću, inače false.
  • 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.