循环遍历ArrayList并将值放入HashMap的时间复杂性与仅搜索ArrayList相比

时间:2019-01-08 11:23:43

标签: java hashmap time-complexity

如果您以apache开头,那么在ArrayList<Obj>上进行循环并使用有用的搜索键将值放入ArrayList会有时间上的好处吗?还是HashMap的循环是否完全抵消了将其放入ArrayList所获得的任何收益?

如果您要在新的HashMap上执行许多搜索,我认为您仍然会受益,但是仅一次搜索呢?

1 个答案:

答案 0 :(得分:8)

仅进行一次搜索就没有必要创建HashMap,因为构建HashMap所花费的时间是线性的(O(n)),这与花费的时间相同直接搜索ArrayList

由于创建HashMap的开销超出了在ArrayList上进行迭代所花费的时间,因此直接在ArrayList上进行迭代进行的单个搜索应该比构建{ {1}},然后搜索某个键(尽管渐近地,这两个操作应花费相同的时间)。

如果要多次使用HashMap是合理的。例如,如果您对大小为HashMap的{​​{1}}执行n搜索,则将花费ArrayList时间(因为每次搜索都需要n时间)。

另一方面,如果将O(n^2)的元素放在O(n)中并在ArrayList上执行Map搜索,则运行时间为{{ 1}}(因为每次搜索将花费预期的恒定时间)。