Sobes.tech
Junior

Разкажете за колекцията Map в Java и нейните особености.

sobes.tech AI

Отговор от AI

Map — това е интерфейс в Java Collection Framework, който представлява колекция от двойки "ключ-стойност". Ключовете са уникални, а стойностите могат да се повтарят.

Основни характеристики:

  • Ключът се използва за достъп до съответната стойност.
  • Един и същи ключ не може да бъде добавен два пъти. При опит за добавяне на съществуващ ключ, старото стойност се заменя с новата.
  • Map не наследява от интерфейса Collection. Има свои собствени методи за работа с двойки "ключ-стойност".
  • Поредността на двойките "ключ-стойност" може да варира в зависимост от конкретната реализация.

Популярни реализации на Map:

  • HashMap: Не гарантира реда на елементите. Осигурява висока производителност за повечето операции (вмъкване, получаване, изтриване) при липса на конфликти с хешове.
  • LinkedHashMap: Запазва елементите в реда на добавяне (или в реда на достъп, ако е конфигуриран по съответния начин).
  • TreeMap: Запазва елементите в сортиран ред по ключа (естествен ред или предоставен от компаратор). Осигурява логаритмично време за повечето операции.

Примери за методи:

// Получаване на стойност по ключ
Object value = map.get(key);

// Добавяне или актуализиране на двойка ключ-стойност
Object oldValue = map.put(key, value);

// Изтриване на двойка по ключ
Object removedValue = map.remove(key);

// Проверка дали ключ съществува
boolean containsKey = map.containsKey(key);

// Проверка дали стойност съществува
boolean containsValue = map.containsValue(value);

// Получаване на всички ключове
Set<KeyType> keys = map.keySet();

// Получаване на всички стойности
Collection<ValueType> values = map.values();

// Получаване на всички записи (двойки ключ-стойност)
Set<Map.Entry<KeyType, ValueType>> entries = map.entrySet();

// Получаване на размера на Map
int size = map.size();

Използване на Map.Entry при итерация:

// Итерация по Entry set
for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
    KeyType key = entry.getKey();
    ValueType value = entry.getValue();
    // ...
}