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

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

Увод

Мапе су основна структура података која се користи у програмирању за складиштење кључно-вредносних парова. У Јави, мапе су имплементиране путем интерфејса Map<K, V>, где K представља тип кључа, а V тип вредности. Мапе пружају ефикасан начин за брзо проналажење и приступ вредностима на основу њихових кључева, чинећи их неопходним за бројне апликације укључујући кеширање, индексирање и претраживање података.

У овом свеобухватном водичу, истражићемо како да користимо мапе у Јави, од основних операција до напредних техника. Почећемо прегледом интерфејса Map<K, V> и затим ћемо практично показати како да креирате, попуњавате, приступате и манипулишете мапама.

Основни концепт

Мапа је колекција јединствених кључно-вредносних парова. Кључеви се користе за идентификацију специфичних вредности, а вредности се повезују са тим кључевима. На пример, ако имамо мапу чији су кључеви имена студената, а вредности њихови просеци, можемо брзо пронаћи просек било ког ученика у мапи једноставно навођењем његовог имена као кључа.

Креирање мапе

Постоје различити начини за креирање мапа у Јави. Најчешћи начин је коришћење имплементације HashMap<K, V>:

java
Map<String, Integer> studentGrades = new HashMap<>();

Овај код ће креирати нову, празну мапу са кључевима типа String и вредностима типа Integer. Можемо такође да користимо друге имплементације мапа, као што су TreeMap<K, V> (која сортира кључеве) или ConcurrentHashMap<K, V> (која је безбедна за конкурентни приступ).

Попуњавање мапе

Једном када креирамо мапу, морамо је попунити кључно-вредносним паровима. То можемо учинити користећи методу put(K key, V value):

java
studentGrades.put("Петар Петровић", 90);
studentGrades.put("Марија Јовановић", 85);
studentGrades.put("Јован Симић", 95);

Овај код ће додати три пара у мапу где су кључеви имена студената, а вредности њихови просеци.

Приступ вредностима мапе

Да бисмо приступили вредностима мапе, можемо користити методу get(K key). Она ће вратити вредност повезану са задатим кључем, или null ако кључ не постоји у мапи:

java
int petarsGrade = studentGrades.get("Петар Петровић");
System.out.println(petarsGrade); //90

Итерација кроз мапу

Да бисмо итерирали кроз мапу и приступили свим њеним кључно-вредносним паровима, можемо користити методу entrySet(). Она враћа скупа поставка (Set) уноса мапе (ентитета), где је сваки ентитет пар типа Map.Entry<K, V>:

java
for (Map.Entry<String, Integer> entry : studentGrades.entrySet()) {
String studentName = entry.getKey();
int studentGrade = entry.getValue();
System.out.println(studentName + ": " + studentGrade);
}

Уклањање ставки из мапе

Да бисмо уклонили ставку из мапе, можемо користити методу remove(K key). Она ће уклонити пару са задатим кључем из мапе и вратити вредност те старе (уклоњене) паре, или null ако кључ није постојао у мапи:

java
studentGrades.remove("Марија Јовановић");

Корисне методе мапе

Поред основних операција, интерфејс Map<K, V> пружа и бројне корисне методе, укључујући:

size(): Враћа број парова у мапи
isEmpty(): Враћа true ако је мапа празна, иначе false
containsKey(K key): Враћа true ако мапа садржи пар са задатим кључем, иначе false
containsValue(V value): Враћа true ако мапа садржи бар један пар са задатом вредношћу, иначе false
putAll(Map<? extends K, ? extends V> m): Додаје све парове из задате мапе у ову мапу

Закључак

У овом чланку смо темељно истражили употребу мапа у Јави. Покрили смо основне операције, као што су креирање, попуњавање и приступ вредностима, као и напредније технике као што су итерација и уклањање ставки. Такође смо истражили корисне методе доступне путем интерфејса Map<K, V>.

Мапе су моћна структура података која се може користити за разноврсне сценарије. Њихова ефикасност и лакоћа употребе чине их неопходним за многе апликације засноване на Јави. Усавршавајући наше разумевање мапа, можемо повећати ефикасност и функционалност наших Јава програма.

Честа питања

1. Које су главне разлике између HashMap<K, V> и TreeMap<K, V>?
HashMap је брз и несортирани, док је TreeMap сортиран према кључевима.

2. Да ли мапе у Јави чувају дупликате кључева?
– Не, мапе чувају јединствене кључеве, што значи да не могу имати више парова са истим кључем.

3. Како могу сортирати мапу по вредностима?
– Можемо користити класи TreeMap<K, V> или сортирати листу вредности из добијене колекције ентитета мапе.

4. Да ли мапе у Јави одржавају редослед уношења?
– Не, мапе не одржавају редослед уношења, осим ако не користимо повезану имплементацију мапе, као што је LinkedHashMap<K, V>.

5. Како могу проверити да ли мапа има било коју вредност?
– Можемо користити методу containsValue(V value) да проверимо да ли мапа садржи пар са задатом вредношћу.

6. Да ли су мапе у Јави безбедне за конкурентне приступе?
– Мапе нису безбедне за конкурентне приступе по подразумеваном подешавању. Ако желимо конкурентну безбедност, можемо користити имплементацију ConcurrentHashMap<K, V>.

7. Можемо ли итерирати само кроз кључеве мапе?
– Да, можемо користити методу keySet() да добијемо скуп кључева мапе и затим итерирати кроз њега.

8. Како могу претворити мапу у листу кључно-вредносних парова?
– Можемо користити метод entrySet().stream().toList() да претворимо мапу у листу ентитета, а затим мапирати те ентитете на кључно-вредносне парове.