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