Шаг 77.
Язык программирования Java.
Интерфейс Map

На этом шаге мы рассмотрим интерфейс Map

Map - интерфейс для работы с ассоциативными массивами. Данный интерфейс не наследуется от интерфейса Collection. В данной коллекции записи хранятся виде пары ключ-значение. Ключи в данной коллекции не повторяются, то есть у каждого ключа только одно значение. Данный интерфейс наделен целым множеством функций. Рассмотрим только часто используемые функции (с другими функциями вы можете ознакомиться в документации):

В интерфейсе Map вложен интерфейс Entry, который представляет из себя запись ключ-значение. Для получения ключа есть функция K getKey(), а для получения значения V getValue(). Также можно для данной пары установить новое значение. Для этого есть функция V setValue(V value).

В Java есть два класса, которые реализуют интерфейс Map:

  1. HashMap - ассоциативный массив на основе хеш-таблицы;
  2. TreeMap - ассоциативный массив на основе дереве поиска.

Приведем ниже пример использования класса TreeMap.


import java.util.Map;
import java.util.TreeMap;

/**
 * Программа для демонстрации использования класса TreeMap.
 * В данной программе мы считаем сколько раз встречается тот или иной символ в 
 *                                                                   заданной строке.
 * */

public class Main {
    public static void main(String[] args) {
        String s = "abacaba";

        /*Создаем ассоциативный массив*/
        Map<Character, Integer> counter = new TreeMap<>();
        for (int i = 0; i < s.length(); i++) {
            /*
                Проверяет есть ли среди ключей i-ый символ
                Если такой ключ есть
            */
            if (counter.containsKey(s.charAt(i))) {
                /*То получим старое значение функцией get*/
                int oldValue = counter.get(s.charAt(i));
                int newValue = oldValue + 1;
                /*И увеличим старое значение на 1*/
                counter.replace(s.charAt(i), newValue);
            } else {
                /*
                    Если среди ключей еще нет такого символа,
                    то добавим в counter запись символ(ключ) - 1 (значение)
                */
                counter.put(s.charAt(i), 1);
            }
        }

        /*Перебираем все записи в counter и выводим в виде: ключ: значение*/
        for (Map.Entry<Character, Integer> entry : counter.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

Проект можно взять здесь


Рис. 1. Вывод программы


На следующем шаге мы рассмотрим класс Collections

Предыдущий шаг Содержание Следующий шаг