根据我的理解,hashmap插入是O(1),对于arraylist,插入是O(n),因为对于hashmap,hashfunction计算hashcode和index并插入条目,并且数组列表每次都进行比较输入一个新元素。
答案 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
的最后添加项目时, HashMap
比ArrayList
更快,因为无需将ArrayList
中的元素移到右侧如果您在HashMap
的前面添加项目ArrayList
,则可以看到arrayList.add(0, str)
的效率。
检查时使用1000
作为外部循环而不是100000
,否则可能会挂起。