Java基础知识总结(一)——ArrayList与LinkedList区别

1.⾸先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的。
2.由于底层数据结构不同,他们所适⽤的场景也不同,ArrayList更适合随机查找,LinkedList更适合删 除和添加,查询、添加、删除的时间复杂度不同
3. 另外ArrayList和LinkedList都实现了List接⼝,但是LinkedList还额外实现了Deque接⼝,所以
LinkedList还可以当做队列来使⽤

 

下面从源码角度进一步分析这两种list的具体差异:

ArrayList:

LinkedList:

 

可以看到ArrayList直接继承了AbstractList, 同时,也实现了List接口。但是,LinkedList既实现了List接口,同时还实现了Deque接口,这就使得LinkedList能够实现一些 (双端队列) 的操作。

查询的对比:

ArrayList:   可以通过ArrayList.get( index) 方法去查询对象,由于它的底层是基于数组实现的,所以在根据下标去进行查询时速度非常快。

LinkedList: 同样可以通过get()方法去查询,但是由于它的底层是根据链表实现的,链表在查询元素过程中必须先对整个链表进行遍历才可以获得指定的对象,因此查询非常耗时。但是,LinkedList在查询头尾节点时非常快,可以通过getFirst()和getLast()方法得到,主要原因是LinkedList的底层始终有两个节点first和last去记录着这两个元素的位置。

总结:如果是根据下标进行查询,那么ArrayList 的查询速度是要快于LinkedList的。

添加的对比:

ArrayList 在添加元素时,通过add()方法来操作,

  1. 如果不指定下标,就直接添加到末尾,相当于扩容操作。
  2. 而如果是指定下标的话,就会放入指定位置。另外,如果待插入位置已有元素存在,则后面的元素会相应的后移,操作时间会相应变长。

 

LinkedList在添加元素时,同样可以使用add()方法。

  1. 如果不指定下标同样也会将元素添加到链表的末尾。
  2. 如果是指定下标的话,就需要遍历整个链表,然后找到对应的那个下标,整个操作的时间和下标位置的大小有关,下标大,时间长,下标小,时间短。

总结:在进行插入/添加操作时,两者的性能无法量化比较。如果不在意性能,ArrayList更适合内容已经初始化好的场景。而LinkedList则更适合需要频繁进行插入操作的场景。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值