Ассоциативные массивы в Java

Во многих ситуациях при работе с массивами данных было бы намного удобнее обращаться к элементу не по индексу (например, 1), а по ключу (например, «Наименование»).

К сожалению, Java, даже в версии 9, не поддерживает ассоциативные массивы. Но, существует способ реализовать подобные им структуры данных с использованием обычных средств Java SE.

Для того чтобы построить простейший ассоциативный массив достаточно воспользоваться классом HashMap установив для его экземпляра строковый тип данных ключа.

Ниже приведён пример работы с такими «массивами»:

HashMap<String, Integer> fruits = new HashMap();
fruits.put("Количество апельсинов", 5);
fruits.put("Количество яблок", 10);
fruits.put("Количество мандаринов", 7);
System.out.println(fruits.get("Количество мандаринов"));

Если же требуется создать ассоциативный массив более сложной структуры, можно поместить объекты HashMap друг в друга и тем самым получить «ассоциативные массивы в ассоциативном массиве», как это показано в приведённом далее примере.

HashMap<String, Integer> fruits = new HashMap();
fruits.put("Количество апельсинов", 5);
fruits.put("Количество яблок", 10);
fruits.put("Количество мандаринов", 7);
HashMap<String, Integer> milkProducts = new HashMap();
milkProducts.put("Количество пачек творога", 2);
milkProducts.put("Количество пакетов молока", 3);
milkProducts.put("Количество банок сметаны", 17);
HashMap<String, HashMap<String, Integer> > eat = new HashMap();
eat.put("Фрукты", fruits);
eat.put("Молочные продукты", milkProducts);
System.out.println(eat.get("Молочные продукты").get("Количество пакетов молока"));

Таким образом можно решить проблему отсутствия непосредственной поддержки ассоциативных массивов в Java. Правда, её наличие существенно облегчило бы труд программистам.

Комментарии
  1. Здравствуйте разбирался со структурами данных в Java, попал на Ваш сайт. Пишите «К сожалению, Java, даже в версии 9, не поддерживает ассоциативные массивы.», а потом приводите пример что можно реализовать используя HashMap с ключом строкового типа. Возникает два вопроса: 1. значит все-таки поддерживает? 2. ключ обязан быть строкового типа?

  2. Отвечу на Ваши вопросы по порядку. Вопрос №1. Ассоциативных массивов в Java действительно нет. Поэтому написать что-то наподобие такого (обратите внимание на синтаксис): value = myArray[«myKey»]; здесь не получится. В то же время подобные структуры данных во многих случаях довольно удобны. Поэтому приходится искать обходные пути. К счастью, требуемый функционал легко реализовать на основе HashMap и в результате получается почти полная аналогия того, что я привёл только что. Вопрос №2 Согласно документации ключом фактически может быть любой тип данных.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *