List与LinkedList与ArrayList

最近又看到有关list的文章,这里就想自己简单总结一下。

首先,LinkedList与ArrayList都是List接口的实现类( 从中可以看出面向接口的好处, 对于不同的需求就有不同的实现),而List接口继承了Collection接口,Collection接口又继承了Iterable接口,因此可以看出List同时拥有了Collection与Iterable接口的特性。还有,ArrayList和LinkedList是不同步的,都是线程不安全的,所以如果不要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费的开销。但在多线程的情况下,最好就用同步的Vetor。

ArrayList

1,ArrayList是以数组的方式来实现的,数组的特性是可以使用索引的方式来快速定位对象的位置,因此随机取得对象效率较高,遍历效率高。一般有三种遍历方法,第一个是数组的方式遍历,第二个是迭代器遍历,第三个就是foreach增强循环遍历。推荐使用第三种,效率简洁更高。

2,ArrayList是由物理空间连续的数组实现,默认数组长度为10,如果不够满足需求,就会自动增加50%的长度,还不够的话就直接增加到需求长度,这个可以看看ArrayList的源码。但也正是因为物理空间连续的特性,所以增加或者删除时,后面的元素都会重新向前或者向后调整索引,所以效率有所降低。

LinkedList

1,LinkedList是采用链表的方式来实现List接口的,有自己特别的方法,如:addFirst(),addLast(),getFirst(),removeFirst()等。由于是采用链表实现的,因此在进行insert和remove动作时在效率上要比ArrayList要好得多,特别是数据量大的时候。适合用来实现Stack(堆栈)与Queue(队列),前者先进后出,后者是先进先出。而LinkedList本身也实现了java.util.Deque接口,所以可以直接使用LinkedList的实例来实现,Queue<String> queue = new LinkedList<String>()。

2,LinkedList的Link链表实现就有链表的缺点,链表的存储空间是物理不连续的,所以消耗的内存会大一些,链表的基本结构是由节点和数据组成,又有First、Last、middle,add、remove等这些属性,所以它操作的方法也是链表给它的方法,insert或remove时可以直接找到Node节点插入删除元素,效率比ArrayList要高。

转载于:https://my.oschina.net/u/3763771/blog/1835550

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值