java的LinkedList类中的元素是否有索引?
如果是,那么当它可以直接使用对象的索引进行搜索时,为什么它的性能o(n)在搜索操作的最坏情况下呢?
如果否,那么我们如何使用void add(int index, Object item)
方法在链接列表的中间插入对象?
答案 0 :(得分:6)
他们有一个逻辑索引,是 - 实际上是你需要迭代的次数,从头开始,到达那个节点之前。
这与说“它可以直接使用对象的索引进行搜索”不一样 - 因为它不能。
通常,索引的O(1)访问是通过使用数组查找来执行的,而在链表的情况下,不是数组 - 只有一个节点链。要访问索引为N的节点,您需要从头部开始并沿着链路走N次...这是一个O(N)操作。
答案 1 :(得分:3)
LinkedList
中的元素不包含任何索引信息,并且没有从索引到元素的映射。
如果您要求向i
位置添加元素(通过调用add(int index, Object item)
),则需要从LinkedList
开始或从其中迭代NSDictionaries
元素结束(取决于它们中哪一个更接近请求的索引),直到达到请求的索引。