Java ассоциативный массив - PullRequest
       57

Java ассоциативный массив

198 голосов
/ 26 февраля 2011

Как я могу создавать и извлекать ассоциативные массивы в Java, как я могу в PHP?

Например:

$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';

Ответы [ 15 ]

1 голос
/ 24 сентября 2015
Object[][] data = {
{"mykey1", "myval1"},
{"mykey2", "myval2"},
{new Date(), new Integer(1)},
};

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

1 голос
/ 28 июня 2011

В JDK 1.5 (http://tinyurl.com/3m2lxju) есть даже примечание: «ПРИМЕЧАНИЕ. Этот класс устарел. Новые реализации должны реализовывать интерфейс Map, а не расширять этот класс».) С уважением, N.

0 голосов
/ 30 августа 2012

Думая об этом больше, я хотел бы выбросить кортежи как более универсальный способ решения этой проблемы. Хотя кортежи не являются родными для Java, я использую Javatuples , чтобы предоставить мне ту же функциональность, которая существует в других языках. Пример того, как справиться с заданным вопросом:

Map<Pair<Integer, String>, String> arr = new HashMap<Pair<Integer, String>, String>();
Pair p1 = new Pair(0, "name");
arr.put(p1, "demo");

Мне нравится этот подход, потому что он может быть расширен до троек и других групп более высокого порядка с помощью API-классов и методов.

0 голосов
/ 06 сентября 2011

Что касается комментария PHP «Нет, PHP не понравится». На самом деле, PHP продолжит пускаться в пух, если вы не установите очень ограничивающие (для PHP) уровни исключений / ошибок (и, возможно, даже тогда).

Что по умолчанию произойдет, так это то, что доступ к несуществующей переменной / элементу массива out of bounds 'отменяет' ваше значение, которое вы присваиваете. НЕТ, это НЕ НУЛЬ. PHP имеет родословную Perl / C, насколько я понимаю. Итак, есть: неустановленные и несуществующие переменные, значения, которые установлены, но имеют значение NULL, логические значения False, а затем все остальное, что есть в стандартных языках. Вы должны проверить их отдельно, ИЛИ выбрать ПРАВУЮ оценку, встроенную в функцию / синтаксис.

0 голосов
/ 09 июня 2011

На самом деле Java поддерживает ассоциативные массивы, они называются словарями!

...