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

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

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

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

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

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

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

2 комментария

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

    1. Отвечу на Ваши вопросы по порядку.

      Вопрос №1.

      Ассоциативных массивов в Java действительно нет. Поэтому написать что-то наподобие такого (обратите внимание на синтаксис):

      value = myArray["myKey"];

      здесь не получится.

      В то же время подобные структуры данных во многих случаях довольно удобны. Поэтому приходится искать обходные пути. К счастью, требуемый функционал легко реализовать на основе HashMap и в результате получается почти полная аналогия того, что я привёл только что.

      Вопрос №2

      Согласно документации ключом фактически может быть любой тип данных.

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

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