HashMap与ArrayList插入性能混淆

时间:2015-05-06 03:11:33

标签: java arraylist hashmap time-complexity asymptotic-complexity

根据我的理解,hashmap插入是O(1),对于arraylist,插入是O(n),因为对于hashmap,hashfunction计算hashcode和index并插入条目,并且数组列表每次都进行比较输入一个新元素。

2 个答案:

答案 0 :(得分:4)

首先,复杂度O(1)的运算并不总是比复杂度O(n)的运算花费更少的时间。 O(1)仅表示操作需要一个恒定的时间(可以是任何值),而不管输入的大小。 O(n)表示操作所需的时间随输入的大小线性增加。这意味着只有当n为无穷大时,理论上保证O(1)比O(n)花费更少的时间。

现在来看你的例子,arraylist.add()操作以摊销的常数时间运行,这意味着虽然特定迭代可能需要花费O(n)时间,但随着时间推移的平均复杂度是O(1 )。有关摊销常数时间的更多信息,请参阅this问题。

答案 1 :(得分:0)

当您在ArrayList的最后添加项目时,

HashMapArrayList更快,因为无需将ArrayList中的元素移到右侧如果您在HashMap的前面添加项目ArrayList,则可以看到arrayList.add(0, str)的效率。

检查时使用1000作为外部循环而不是100000,否则可能会挂起。