如果我知道输入到地图条目中的值是相同的,那么我最好检查一下它是不在地图中还是仅仅进行了放置? 换句话说,是
if (!map.containsKey(key)){
map.put(key, value);
}
如果我知道密钥的值相同,那么比仅仅map.put(key, value)
更好。
背景:
我正在尝试计算将id映射到一组int的地图的所有重叠。例如:给定{A:1,2,3; B:2,4,6; C:2,3,4; D:1,3,5}
我需要获取此地图:{AnB:2; AnC:2,3; AnD:1,3; BnC:2,4; AnBnC:2; AnCnD:3;}
。递归执行此操作不是我们运行堆空间的较大集合的选项。所以我通过在现有图层上添加下一个“图层”来迭代地进行。因此,为了获得AnBnC,我采用AnB并计算与C的交点。但这也意味着我采用AnC并计算与B的交点,这两者都会给出相同的结果。
谢谢!
答案 0 :(得分:2)
我不确定你的直接问题的答案,哪个更快,但如果你正在尝试优化,我建议避免做不必要的设置交叉。喜欢的东西;
intersectionKey = setA.key + setB.key;
if (!map.containsKey(intersectionKey)) {
intersection = A | B;
map.put(intersectionKey, intersection);
}
答案 1 :(得分:0)
这取决于您使用的是哪个地图?
https://docs.oracle.com/javase/7/docs/api/java/util/Map.html#put(K,%20V)
Map.put API确实返回先前的值。 因此,put()API self必须比get()贵,而get()必须比contains()贵。
简而言之,对于基本的HashMap / TreeMap实现,只需.put就会更快。
但是,它可能是ConcurrentMap的一个例外,它们的实现可能会尝试优化线程本地或避免在多线程环境中锁定开销。
顺便说一句,但如果我是你。如果可能的话,我将使用BitSet优化内存使用和性能。