因此,我有一个HashMap映射,其中包含约120.000个条目。每次出现新条目时,我都会检查该条目是否已存在于HashMap中(if(!map.containsKey(hashcode))),如果不是,则创建一个新对象并将其放入HashMap中。
现在我的问题是:最好创建一个布尔数组NxN(N = 6.000)并每次检查[n1] [n2]中的数组元素是否为false(尚未在hashmap中)或true(该对在HashMap中),而不是使用.containsKey()?
答案 0 :(得分:1)
Map
具有computeIfAbsent()
方法,该方法完全可以满足您的需求:
- 如果指定的键尚未与值关联(或已映射
- 到{@code null}),尝试使用给定的映射计算其值
- 功能并将其输入此地图,除非{@code null}。 *
如果函数返回{@code null},则不会记录任何映射。如果
- 该函数本身会引发一个(未经检查的)异常,
- 异常被重新抛出,并且不记录任何映射。最
- 常见用法是构造一个用作初始对象的新对象
- 映射的值或记录的结果
关于数组的选项,如果您的键哈希算法很好,那么您的地图将在大约O(1)中按键执行查找,这与按索引在数组中查找一样好。但是您的额外阵列将使用额外的内存,在这种情况下不需要。
答案 1 :(得分:0)
请参见,HashMap的时间复杂度为O(1),因此用containsKey进行检查是您情况下的最佳解决方案。
答案 2 :(得分:0)
不,containsKey是一种完美的方法。 HashMap具有通常的O(1)查找,因此这不是问题,除非要存储的对象的哈希算法实现不佳。唯一的问题是,为什么在HashMap中有这么多条目?