Java中的多层哈希

时间:2012-01-16 22:50:00

标签: java hash reference multi-level multi-layer

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

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

'key1'可能是某个人的姓名,'key2'可能是“储蓄帐户”(与“检查帐户”相比),'value'可能是帐户中的金额。

Java中是否存在相同的内容,即通过哈希引用访问值?这个语法是什么样的?任何示例或其他资源参考将不胜感激。谢谢!

5 个答案:

答案 0 :(得分:9)

在Java中,我们使用对象。我们会有一个Person对象,name属性类型为StringsavingsAccount类型为Account。此Account对象将具有value类型BigDecimal的属性。

Java是一种OO语言。这不是Perl。你应该在Java中使用Java习语,而不是Perl习语。

答案 1 :(得分:5)

您可以拥有Map<Map<..>>,您可以在其中拨打map.get("key1").get("key2")

但请注意,Java是一种静态类型的,面向对象的语言。因此,您最好创建课程:PersonSavingsAccountPerson有一个字段private SavingsAccount savingsAcount。然后,您将能够执行编译时安全:map.get("John").getSavingsAccount()

答案 2 :(得分:1)

您可以使用equalshashCode方法正确实现来创建表示密钥的类:

答案 3 :(得分:1)

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

答案 4 :(得分:0)

例如,你可以有一个

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

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

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

然后一个

HashMap<Person, PersonalAccounts> 
如果你想使用HashMap,

就足够了。

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