Java中的多层哈希

发布于 2024-12-27 19:32:33 字数 287 浏览 1 评论 0 原文

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

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

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

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

In Perl if I want to have a multi-layered hash, I would write:

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

Where 'key1' might be a person's name, 'key2' might be "Savings Account" (vs. "Checking Account") and 'value' might be the amount of money in the account.

Is there an equivalent to this in Java, i.e. access values via hash references? What's the syntax like for this? Any examples or other resource references would be greatly appreciated. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

凡间太子 2025-01-03 19:32:34

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

I am not sure why the question was down-voted but to answer your question, in Java you can use nested Maps to achieve the same.

仙女山的月亮 2025-01-03 19:32:34

例如,你可以有一个

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

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

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

那么单个

HashMap<Person, PersonalAccounts> 

如果你想使用 HashMap,

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

For instance, you can have a

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

I would not call it OOD, but you can.

It would probably be a bit more readable if you had a class for representing Person, a class to represent PersonalAccounts, which has Account instances as attributes, one for each account type (I assume those would be very few, otherwise a list would be better).

Then a single

HashMap<Person, PersonalAccounts> 

is enough, if you want to use an HashMap.

Actually you don't even need a map if an instance of PersonalAccounts is an attribute of a Person.

一抹淡然 2025-01-03 19:32:33

在Java中,我们使用对象。我们将有一个 Person 对象,其 name 属性为 String 类型,以及一个 savingsAccount 类型为 >帐户。此 Account 对象将具有一个 BigDecimal 类型的 value 属性。

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

In Java, we use objects. We would have a Person object, with a name property of type String, and a savingsAccount of type Account. This Account object would have a value property, of type BigDecimal.

Java is an OO language. It's not Perl. You should use Java idioms in Java, and not Perl idioms.

奢望 2025-01-03 19:32:33

您可以拥有一个 Map>,您可以在其中调用 map.get("key1").get("key2") code>

但请注意,Java 是一种静态类型、面向对象的语言。因此,您最好创建类:PersonSavingsAccount,并且Person有一个字段private SavingsAccount savingAcount。然后您就可以进行编译时安全操作:map.get("John").getSavingsAccount()

You can have a Map<Map<..>>, where you'll be able to call map.get("key1").get("key2")

But note that Java is a statically-typed, object-oriented language. So you'd better creat classes: Person, SavingsAccount, and a Person has a field private SavingsAccount savingsAcount. Then you'll be able to do a compile-time safe: map.get("John").getSavingsAccount()

一个人的旅程 2025-01-03 19:32:33

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

You could create a class that represents the key with proper implementation for equals and hashCode methods:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文