在线性时间内迭代数组时HashMap的空间复杂度

时间:2014-12-06 17:39:29

标签: java hashmap space-complexity

我对程序的空间复杂性存有疑问。假设我正在迭代一个大小为n的数组(存储事件ID)(可能有数十亿)。我想跟踪每个事件id的出现,所以我使用哈希映射将事件id存储为键,将其出现计数器存储为值。

这是伪代码:

Map m =  HashMap<>
for i to n-1
  if m.contains(i)
     int prevCount =  m.get(i)
     m.put(i, prevCount +1)
  else
   m.put(i, 1)

空间复杂性会是什么?

PS这是我在stackoverflow中的第一个问题,如果它看似重复,请路由我到正确的答案。

1 个答案:

答案 0 :(得分:3)

您的循环最多可为HashMap添加n-1个键/值对。

因此,空间复杂度为O(n),因为HashMap内部存储包含一个数组,其大小将达到接近n的2的幂(假设您没有给出{ {1}}初始容量远大于HashMap),并且数组的每个元素都是一个链接列表,其平均元素数为n