LinkedList搜索java中的时间复杂度

时间:2016-02-18 20:11:53

标签: java

我对java中LinkedList的搜索复杂性感到困惑。我已经读过从LinkedList搜索元素的时间复杂度是O(n)。 比如说,

LinkedList<String> link=new LinkedList<String>();
    link.add("A");
    link.add("B");
    link.add("C");
    System.out.println(link.get(1));

现在,从这里通过get(index)方法我们可以说要搜索一个元素它应该花费O(1)次。但我读过它需要O(n)。 任何人都可以帮助我获得清晰的概念吗?

3 个答案:

答案 0 :(得分:3)

链接列表实现中的访问,如java.util.LinkedList,是O(n)。要从列表中获取元素,有一个循环跟随从一个元素到下一个元素的链接。在最坏的情况下,在n元素列表中,执行循环的n次迭代。

与基于数组的列表(如java.util.ArrayList)进行对比。给定索引,执行一个随机访问操作以检索数据。那是O(1)。

答案 1 :(得分:0)

Ordo函数表示最大近似值。因此它是O(n)因为如果列表有n个条目并且你想获得最后一个条目,那么搜索将遍历n个项目。

另一方面,查找ArrayList是O(1),因为查找时间接近常量,无论列表的大小和您要查找的索引如何。

答案 2 :(得分:0)

链接列表就是这样,通过诸如指针之类的方式链接在一起的项目列表。要搜索链接列表,您将迭代列表中的每个项目。这将花费的最多时间是T(n),其中n是列表的长度。

big-O表示法代表上限或最坏情况。

如果您在索引1处搜索项目,它将几乎立即完成,T(1),因为它是列表中的第一项。如果要搜索第n个项目,则需要T(n)时间,因此保留在O(n)中。

链表的直观表示:

[1] - &gt; [2] - &gt; [3] - &gt; [4] - &gt; ...... [n-1] - &gt; [N]

get()方法的示例

get(int i)
{ 
 Node current = head
 while (i > 0)
 {
   current = current.getNext()
   i--
 }
 return current
}

如您所见,它会迭代列表中的每个节点。