简体   繁体   中英

Java HashMap of HashMap vs HashMap of String

I am new to Java and i am currently rewriting a Perl code in Java. In Perl i have a Hash of Hash like

$hashref->{index1}->{index2}->{index3} = $value;

In this i store the index1 , index2 , and index3 in 3 separate hashes along with above hash. Also Index1 and index2 are of type long and index3 is String.

Now i want to rewrite the similar stuff in Java. So i came up with 2 ways

1)HashMap<Long, HashMap<Long ,HashMap<String,String> >>
2)HashMap<String, String> //In this approach i concatenate index1,index2 and index3 using _ and make a single string

I want to know which way will be efficient as max of 100 keys for index1, 300 keys for index2 and 700 keys for index3 is possible.

First, let's discuss #2

  • It doesn't work 100% of the time due to possible ambiguity if the index strings can contain the separator character ("_"):

    Eg consider 3 sets of indexes: ("12", "13_13" and "14") and ("12_13", "13" and "14"). They both produce the same concatenated key.

  • It doesn't allow straightforward processing of the 2-d and 3-d level hashes as data structures easily .

    Eg you can not easily do Java equivalent of " keys %{$hash->{index1}} " - find all the keys for a hash of second level stored under index1. It's doable, but much harder. Or " delete $hash->{index1} ".

If these 2 considerations don't bother you, using a concatenated key for 1-level HashMap is fine.

If they do, you need to do #1 - a fairly robust implementation was posted on SO previously: " Java equivalent of Perl's hash " . Please note that such implementation is NOT trivial, and therefore your alternate approach of concatenated 1 level of indexes is a very good alternative.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM