Многослойный хэш в Java - PullRequest
2 голосов
/ 17 января 2012

В Perl, если я хочу иметь многослойный хеш, я бы написал:

$hash_ref->{'key1'}->{'key2'}='value';

Где 'key1' может быть именем человека, 'key2' может быть "Сберегательным счетом" (вместо "Проверка счета"), а 'value' может быть суммой денег на счете.

Есть ли эквивалент в Java, то есть доступ к значениям через ссылки на хэш? Каков синтаксис для этого? Любые примеры или другие ссылки на ресурсы будут с благодарностью. Спасибо!

Ответы [ 5 ]

9 голосов
/ 17 января 2012

В Java мы используем объекты.У нас будет объект Person со свойством name типа String и savingsAccount типа Account.Этот объект Account будет иметь свойство value типа BigDecimal.

Java - это язык OO.Это не Perl.Вы должны использовать идиомы Java в Java, а не Perl.

5 голосов
/ 17 января 2012

У вас может быть Map<Map<..>>, где вы сможете вызывать map.get("key1").get("key2")

Но учтите, что Java - это объектно-ориентированный язык со статической типизацией.Так что лучше создавать классы: Person, SavingsAccount, а у Person есть поле private SavingsAccount savingsAcount.Тогда вы сможете сделать сейф во время компиляции: map.get("John").getSavingsAccount()

1 голос
/ 17 января 2012

Я не уверен, почему вопрос был отклонен, но чтобы ответить на ваш вопрос, в Java вы можете использовать вложенные Карты, чтобы добиться того же.

1 голос
/ 17 января 2012

Вы можете создать класс, который представляет ключ с правильной реализацией для методов equals и hashCode:

0 голосов
/ 17 января 2012

Например, у вас может быть

HashMap<String, HashMap<String, BigDecimal>>. 

Я бы не назвал его OOD, но вы можете.

Вероятно, было бы немного более читабельным, если бы у вас был класс дляпредставляющий Person, класс для представления PersonalAccounts, который имеет экземпляры Account в качестве атрибутов, по одному для каждого типа учетной записи (я предполагаю, что их будет очень мало, в противном случае список будет лучше).

Тогда один

HashMap<Person, PersonalAccounts> 

достаточно, если вы хотите использовать HashMap.

На самом деле вам даже не нужна карта, если экземпляр PersonalAccounts является атрибутом Person.

...