我有一个双层嵌套的散列图哈希图,想要检查密钥是否存在并放置新值。目前我正在嵌套if语句来检查每个级别的密钥存在。有没有更有效的方法对此进行编码?
HashMap<Foo1, HashMap<Foo2, HashMap<Foo3, Double>>> my_map = new HashMap<Foo1, HashMap<Foo2, HashMap<Foo3, Double>>>();
if (my_map.containsKey(foo1key)) {
if (my_map.get(foo1key).containsKey(foo2key)) {
if (my_map.get(foo1key).get(foo2key).containsKey(foo3key)) {
return my_map.get(foo1key).get(foo2key).get(foo3key);
}
}
}
double foo3key = getValue();
// do the above steps again to put foo3key into map.
答案 0 :(得分:1)
最有效的方式(假设您的值始终为非null)如下:
HashMap<Foo2, HashMap<Foo3, Double>> map2 = my_map.get(foo1Key);
if(map2!=null) {
HashMap<Foo3, Double> map3 = map2.get(foo2Key);
if (map3!=null) {
Double value = map3.get(foo3Key);
if (value!=null) {
return (double)value;
} else {
// add value to map3, or whatever
}
}
}
这利用了以下技术:
虽然这有点乱 - 如果你做了很多这样的操作,那么我建议把它分解成一个单独的函数,这样你就可以这样做:
double value = getNestedValue(my_map,foo1Key,foo2Key,foo3Key);