HashMap与数组搜索的时间复杂度

时间:2019-05-22 15:05:25

标签: java arrays performance hashmap time-complexity

因此,我有一个HashMap映射,其中包含约120.000个条目。每次出现新条目时,我都会检查该条目是否已存在于HashMap中(if(!map.containsKey(hashcode))),如果不是,则创建一个新对象并将其放入HashMap中。

现在我的问题是:最好创建一个布尔数组NxN(N = 6.000)并每次检查[n1] [n2]中的数组元素是否为false(尚未在hashmap中)或true(该对在HashMap中),而不是使用.containsKey()?

3 个答案:

答案 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中有这么多条目?