【发布时间】:2014-05-08 23:19:17
【问题描述】:
我有一个嵌套的 Hashmap(使用 JDK 7),定义如下
private static HashMap<SourceSystemIdEnum, HashMap<String, HashMap<StatsEnum, Double>>> statsCache = new HashMap<SourceSystemIdEnum, HashMap<String, HashMap<StatsEnum, Double>>>();
所有映射的所有键(也嵌套)在运行时创建,外部映射的值是另一个映射;下一级地图的值是另一个地图;而最内层map的值只是一个Double(它不会是collection)。
我使用上述数据结构来维护缓存(树状对象层次结构),其中最内层映射的值每秒更新一次(即 Double 类型)。
我在寻找更好/更简单的嵌套地图时遇到了http://tomjefferys.blogspot.com/2011/09/multimaps-google-guava.html。但是最内层地图的价值永远不会是收藏,所以谷歌番石榴乍一看似乎没有相关性(?)
我也遇到了这个How to iterate through Nested Map and Multiset? - Java/Guava,甚至在番石榴中迭代也没有更好(似乎)。
在迭代或更新我的场景的值(地图中的地图中的地图)时,我试图减少常规(肉鸡板)代码,以及如何重写我现有的代码以切换到 Google Guava 的多地图(或者将比 jdk7 的常规哈希图更好)。
****编辑**** 我同意有这么深的嵌套是不寻常的。我可以有一个地图列表,但是查找会很昂贵。这是地图的细分
HashMap : 外层映射表示各种数据源作为键(例如:NDAQ、CBOE、NYSE、AMEX)
HashMap 中级映射表示各种代码作为键(例如:CSCO,INTC,MSFT..)
HashMap:外层map表示各种统计参数的值(EX:mean,median,skew,kurtosis)作为key,就是这些Double值 每分钟更新一次
注意:以上 3 个映射中的所有键都是预先知道的(因此映射在运行时不会增长或调整大小 - 它只是最内部映射中的 Double 值,每分钟更新一次)
【问题讨论】:
-
你需要的是一棵树
-
你能给我指点 API pl 吗?我认为现在数据结构的成本可能不错(?),但是用于访问内部地图的样板代码很笨拙
-
谢谢@Ata。树似乎是正确的,尽管我不确定 java 中树的流行实现 stackoverflow.com/questions/3522454/…
标签: java collections guava apache-commons