(给ImportNew加星标,提高Java技能)
编译:ImportNew/唐尤华
stackoverflow.com/questions/322715/when-to-use-linkedlist-over-arraylist-in-java
问题:
通常我会这么定义列表:
List names = new ArrayList<>();
names类型使用List接口,那么具体实现该如何选择。
什么时候应该用LinkedList替代ArrayList,反之亦然?
总结:
大多数情况下,相比LinkedList更推荐使用ArrayList或ArrayDeque。如果不确定,可以直接选用ArrayList。
LinkedList和ArrayList是List接口的两种不同实现。LinkedList采用双向链表实现。ArrayList通过动态调整数组大小实现。
与标准链表和数组操作一样,不同的实现方法算法运行时也不同。
对于LinkedList
get(int index)复杂度为O(n)(平均步长n/4)
add(E element)复杂度为O(1)
add(int index, E element)复杂度为O(n)(平均步长n/4)。但是当index = 0时复杂度为O(1)的主要优点。
remove(int index)复杂度为O(n)(平均步长n/4)
Iterator.remove()复杂度为O(1)。的主要优点
ListIterator.add(E element)复杂度为O(1)。这是LinkedList的一个主要优点。
注意:许多操作平均需要n/4步长,最好的情况下(例如index= 0)步长为常数,最坏的情况下需要n/2步(列表中间)。
对于ArrayList
get(int i