2

在 Perl 中,如果我想要一个多层散列,我会写:

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

其中'key1'可能是一个人的名字,'key2'可能是“储蓄账户”(相对于“支票账户”),'value'也可能是账户中的金额。

Java中是否有与此等效的方法,即通过哈希引用访问值?这个的语法是什么?任何示例或其他资源参考将不胜感激。谢谢!

4

5 回答 5

9

在 Java 中,我们使用对象。我们将有一个Person对象,其name属性为 type String, asavingsAccount为 type Account。该Account对象将具有value类型为 的属性BigDecimal

Java 是一种面向对象的语言。这不是 Perl。您应该在 Java 中使用 Java 惯用语,而不是 Perl 惯用语。

于 2012-01-16T22:53:14.677 回答
5

你可以有一个Map<Map<..>>,在那里你可以打电话map.get("key1").get("key2")

但请注意,Java 是一种静态类型、面向对象的语言。所以你最好创建类:Person,SavingsAccount和 aPerson有一个字段private SavingsAccount savingsAcount。然后你就可以做一个编译时安全:map.get("John").getSavingsAccount()

于 2012-01-16T22:52:06.187 回答
1

您可以创建一个表示具有正确实现的键的类equalshashCode方法:

于 2012-01-16T22:53:09.243 回答
1

我不确定为什么这个问题被否决了,但为了回答你的问题,在 Java 中你可以使用嵌套地图来实现同样的目的。

于 2012-01-16T22:55:09.610 回答
0

例如,您可以有一个

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

我不会称之为OOD,但你可以。

如果你有一个表示 Person 的类,一个表示 PersonalAccounts 的类,它具有 Account 实例作为属性,每个帐户类型一个(我假设这些会很少,否则列表会更好)它可能会更具可读性)。

然后单

HashMap<Person, PersonalAccounts> 

足够了,如果你想使用 HashMap。

实际上,如果 PersonalAccounts 的实例是 Person 的属性,您甚至不需要映射。

于 2012-01-16T23:02:33.870 回答