如果您以apache
开头,那么在ArrayList<Obj>
上进行循环并使用有用的搜索键将值放入ArrayList
会有时间上的好处吗?还是HashMap
的循环是否完全抵消了将其放入ArrayList
所获得的任何收益?
如果您要在新的HashMap
上执行许多搜索,我认为您仍然会受益,但是仅一次搜索呢?
答案 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}}(因为每次搜索将花费预期的恒定时间)。