这是一个了解何时使用LinkedList的真实尝试;据我所知,由于java.util.LinkedList不支持随机访问,获取第n个元素的唯一方法是从1跳到(n-1),或者使用get(n),这本身就非常低效。那么为什么要使用LinkedList呢?除非您想要使用ListIterator从两侧迭代集合,否则ArrayList大部分情况下都可以胜任。
请思考以下这个方法:
List list = // choose your list here
list.add(0, new Object());
对于大型列表,LinkedList
的性能将远优于 ArrayList
。同样的情况也适用于。
list.remove(0);
...还有许多其他方法。如需更多信息,建议阅读关于java.util.Deque
接口的内容,该接口也由LinkedList
实现。
remove(int)
的源代码。 ArrayList
执行对System.arraycopy
的调用,而LinkedList
仅更新一些引用...在接口中声明并不影响实现事实...除此之外,请注意remove(int)
未在Iterator
中声明,而是在List
中声明... - Lukas EderArrayDeque
(或反转该列表)。 - Tom Hawtin - tacklineLinkedList
相对于ArrayList
更适合在任意索引处进行插入/删除操作。当在ArrayList
中插入或删除元素时,内部数组必须进行移位操作。而对于LinkedList
来说,只需要简单地重新指向节点的指针即可。
ArrayList
通常会快一些。 - Tom Hawtin - tackline