我可以列出所有运行时间都很快的列表吗?这种类型的清单有可能吗?如果需要通过节点搜索其他节点,那么我无法理解如何保持搜索或添加时间不变,更不用说添加了。
答案 0 :(得分:1)
首先你只说get(),add()和set(),但是你也说了search()。前三个在ArrayList和类似的实现中都有O(1)平均运行时间。在通常被视为列表的任何内容中,您不能有O(1)搜索时间。
编辑:有些人正确地指出,如果列表实现还将元素索引存储在hashmap中,则可以获得O(1)查找时间。严格来说,只要它实现了List接口,它就是一个列表。我应该说你不能用 列表来做到这一点。
答案 1 :(得分:0)
只是将我的评论作为答案发布......
如果您使用的扩展列表根据需要进行了扩展,则可以实现摊销 O(1)get
ting,set
ting和{{ 1}},这意味着你最终需要扩大其规模,但这并不足以发生。很确定这就是Java的ArrayList类的工作原理。
您可以在此处阅读更多相关信息。 https://stackoverflow.com/a/4450659/1572906
你提到了搜索,但是通过这种方法,O(1)看起来并不可行。您可以使用数组旁边的哈希表来实现O(1)。