2

Perl で多層ハッシュが必要な場合は、次のように記述します。

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

'key1'人の名前、'key2'「普通預金口座」(「当座預金口座」ではなく)、口座'value'の金額などです。

Java でこれに相当するものはありますか?つまり、ハッシュ参照を介して値にアクセスしますか? これはどのような構文ですか?例やその他のリソースの参照は大歓迎です。ありがとう!

4

5 に答える 5

9

Java では、オブジェクトを使用します。type のプロパティと typeのを持つPersonオブジェクトがあります。このオブジェクトには、タイプのプロパティがあります。nameStringsavingsAccountAccountAccountvalueBigDecimal

Java はオブジェクト指向言語です。パールではありません。Perl イディオムではなく、Java イディオムを Java で使用する必要があります。

于 2012-01-16T22:53:14.677 に答える
5

あなたは、あなたがMap<Map<..>>呼び出すことができる場所を持つことができますmap.get("key1").get("key2")

ただし、Java は静的型付けのオブジェクト指向言語であることに注意してください。したがって、クラスを作成したほうがよいでしょう: PersonSavingsAccount、および aPersonにはフィールドがありますprivate SavingsAccount savingsAcount。次に、コンパイル時のセーフを実行できるようになります。map.get("John").getSavingsAccount()

于 2012-01-16T22:52:06.187 に答える
1

equalsおよびhashCodeメソッドの適切な実装を使用して、キーを表すクラスを作成できます。

于 2012-01-16T22:53:09.243 に答える
1

質問が反対票を投じられた理由はわかりませんが、質問に答えるために、Java ではネストされた Maps を使用して同じことを達成できます。

于 2012-01-16T22:55:09.610 に答える
0

たとえば、

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

私はそれを OOD とは呼びませんが、できます。

Person を表すためのクラス、PersonalAccounts を表すためのクラスがあれば、おそらくもう少し読みやすくなるでしょう。このクラスには、アカウントの種類ごとに 1 つの Account インスタンスが属性として含まれます (それらは非常に少ないと思います。それ以外の場合は、リストの方が適切です)。 )。

それからシングル

HashMap<Person, PersonalAccounts> 

HashMap を使用する場合は、これで十分です。

実際、PersonalAccounts のインスタンスが Person の属性である場合、マップは必要ありません。

于 2012-01-16T23:02:33.870 に答える