我是Java新手,目前正在用Java重写Perl代码。
在Perl中,我有一个像哈希一样的哈希

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


在此,我将index1,index2和index3存储在3个单独的散列以及上述哈希中。
同样,Index1和index2的类型为long,而index3为String。

现在我想用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最多100个键,索引2最多300个键,索引3最多700个键。

最佳答案

首先,让我们讨论#2


如果索引字符串可能包含分隔符(“ _”),可能会导致歧义,因此100%的时间无效:

例如。考虑3组索引:(“ 12”,“ 13_13”和“ 14”)和(“ 12_13”,“ 13”和“ 14”)。它们都产生相同的串联密钥。
它不允许轻易地将2维和3维散列直接处理为数据结构。

例如。您不能轻易做到Java等价于“ keys %{$hash->{index1}}”的情况-查找index1下存储的第二级哈希的所有键。这是可行的,但要困难得多。或“ delete $hash->{index1}”。


如果这两个注意事项都不会打扰您,则可以为1级HashMap使用串联键。

如果这样做,则需要做#1-先前在SO上发布了一个相当健壮的实现:
Java equivalent of Perl's hash”。请注意,这样的实现并非无关紧要,因此,将1级索引连接起来的替代方法是一个很好的选择。

10-07 16:20
查看更多