【问题标题】:Time Complexity of Looping over an ArrayList and putting values in HashMap vs. just searching the ArrayList遍历 ArrayList 并将值放入 HashMap 与仅搜索 ArrayList 的时间复杂度
【发布时间】:2019-01-08 11:23:42
【问题描述】:

如果您从ArrayList<Obj> 开始,那么对ArrayList 进行for 循环并将值放入带有有用搜索键的HashMap 是否有时间优势?还是ArrayList 的循环几乎否定了将其放入HashMap 所获得的任何好处?

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

【问题讨论】:

    标签: java hashmap time-complexity


    【解决方案1】:

    对于一次搜索,创建HashMap 毫无意义,因为构建HashMap 所需的时间将是线性的(O(n)),这与直接搜索@987654324 所需的时间相同@。

    由于创建 HashMap 的开销超出了迭代 ArrayList 所花费的时间,因此通过直接迭代 ArrayList 进行的单个搜索应该比构建 HashMap 然后搜索更快一些关键(虽然渐近两个操作应该花费相同的时间)。

    如果您要多次使用HashMap,它是合理的。例如,如果您对大小为nArrayList 执行n 搜索,则需要O(n^2) 时间(因为每次搜索都需要O(n) 时间)。

    另一方面,如果您将ArrayList 的元素放在Map 中并在Map 上执行n 搜索,则运行时间将为O(n)(因为每次搜索都需要预计恒定时间)。

    【讨论】:

    • 大 O 表示法是基于集合中元素的数量,而不是集合被处理的次数。对于n个元素的ArrayList,线性搜索,最好情况是O(1),平均情况是O(n/2),最坏情况是O(n)。
    • @nicomp 我的意思是最坏的情况,尽管即使对于平均情况,O(n/2) 与 O(n) 相同。您不能依赖复杂度计算中的最佳情况,因此 O(1) 是无关紧要的。
    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 2015-02-13
    • 2013-01-12
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多