HashMap的Java HashMap与字符串的HashMap

HashMap的Java HashMap与字符串的HashMap,java,perl,data-structures,Java,Perl,Data Structures,我是Java新手,目前正在用Java重写Perl代码。 在Perl中,我有一个类似于 $hashref->{index1}->{index2}->{index3} = $value; 在本文中,我将index1、index2和index3与上述散列一起存储在3个单独的散列中。 Index1和index2也是long类型,index3是字符串 现在我想用Java重写类似的东西。 所以我想出了两种方法 1)HashMap<Long, HashMap<Long ,Has

我是Java新手,目前正在用Java重写Perl代码。 在Perl中,我有一个类似于

$hashref->{index1}->{index2}->{index3} = $value;
在本文中,我将index1、index2和index3与上述散列一起存储在3个单独的散列中。 Index1和index2也是long类型,index3是字符串

现在我想用Java重写类似的东西。 所以我想出了两种方法

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
1)HashMap
2) HashMap//在这种方法中,我使用u连接index1、index2和index3,并生成一个字符串
我想知道哪种方法最有效,因为index1最多可以有100个键,index2最多可以有300个键,index3最多可以有700个键

  • 如果索引字符串可以包含分隔符(“\”),则由于可能存在歧义,它在100%的时间内不起作用:

    例如,考虑3组指标:(12)、“1313”和“14”和(12:13)、“13”和“14”。它们都产生相同的连接键

  • 它不允许将二维和三维级别的散列作为数据结构进行简单的处理

    例如,您不可能轻松地执行Java等价的“
    keys%{$hash->{index1}}
    ”——查找存储在index1下的第二级哈希的所有键。这是可行的,但要困难得多。或“
    删除$hash->{index1}

如果这两个注意事项不困扰您,那么为1级HashMap使用连接键就可以了

如果他们这样做了,你需要做#1-之前发布了一个相当健壮的实现:
" " . 请注意,这样的实现并不是微不足道的,因此您的串联1级索引的替代方法是一个非常好的替代方法。

可能重复的请注意,您的第一个被剪断的代码肯定不是可编译的Perl代码:)请参阅DVK链接。。。你会得到你想要的…事实上,在重读之后,我想他是想问一个稍微不同的问题-应该使用3级HashMap,还是1级HashMap。我会回答的。效率上的差异将是相当小的;这取决于您的访问模式。不过,嵌套散列更有意义,特别是当您需要直接访问特定子键(即不通过循环键查找匹配项)时。我怀疑,如果具有相同项的两个映射具有不同的迭代顺序,则选项2也可能出现问题。@LouisWasserman-如果他想要Perl散列等价物,我认为他根本不关心迭代顺序。虽然我不会说得更难,但你需要迭代所有的键并匹配给定的模式;如果在键之间使用不同的字符,就很容易了。尽管如此,我仍然使用嵌套哈希。@DVK…我使用了相当于Perl哈希的Java,在某种程度上我对使用方法很清楚。另外,请评论我的第一种方法和第二种方法哪个更快/更有效?@Raghuram更快什么?执行速度更快,还是从编码角度看更快?