MS-ArrayList和LinkedList的区别

1.最大的不同点

最基本的不同点, ArrayList的底层数据结构是数组, LinkedList底层的数据结构是链表.

2.时间复杂度

由于数据结构不同, 两者的适用场景也有差异. ArrayList更适合随机查找,LinkedList更适合删除和添加.

ArrayList的get是根据下标查询, LinkedList是链表, 所以会遍历n个元素.

ArrayList在指定下标添加元素, 指定下标后的元素需要后移, 而LinkedList需要先遍历n个元素, 再修改指针指向

ArrayList添加元素的会有扩容的情况, 如果数据扩容, 那么本次添加操作的速度会变慢

时间复杂度对比:

ArrayListLinkedList
get(index)O(1)O(n)
add(E)O(1)O(1)
add(index, E)O(n)O(n)
remove(index)O(n)O(1)

3.接口实现

ArrayList和LinkedList都实现了List接⼝,但是LinkedList还额外实现了Deque接⼝,所以
LinkedList还可以当做队列来使⽤

//ArrayList接口
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable{}

//LinkedList接口
public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable{}

LinkedList的接口继承了Deque

//Deque<E>接口
public interface Deque<E> extends Queue<E> {
	void addFirst(E e);
	void addLast(E e);
	......
}

可以看出Deque是一个双端队列, LinkedList也同样可以作为一个双端队列使用.

4.空间

空间的使用, ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间.

使用场景

当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能.

当操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值