码迷,mamicode.com
首页 > 其他好文 > 详细

9、集合--ArrayList和LinkedList的一些对比

时间:2019-05-11 16:14:31      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:顺序存储   abstract   操作   顺序存储结构   deque   反序列化   插入   object   bst   

 

ArrayList:顺序存储结构(数组)

1、ArrayList自己实现了序列化和反序列化的方法,因为它自己实现了 private void writeObject(java.io.ObjectOutputStream s)和

   private void readObject(java.io.ObjectInputStream s) 方法


2、ArrayList基于数组方式实现,无容量的限制(会扩容)


3、添加元素时可能要扩容(所以最好预判一下),删除元素时不会减少容量(若希望减少容量,trimToSize()),

  删除元素时,将删除掉的位置元素置为null,下次gc就会回收这些元素所占的内存空间。


4、线程不安全


5、add(int index, E element):添加元素到数组中指定位置的时候,需要将该位置及其后边所有的元素都整块向后复制一位


6、get(int index):获取指定位置上的元素时,可以通过索引直接获取(O(1))


7、remove(Object o)需要遍历数组


8、remove(int index)不需要遍历数组,只需判断index是否符合条件即可,效率比remove(Object o)高

 

9、contains(E)需要遍历数组

 

10、使用iterator遍历可能会引发多线程异常

 

 

LinkedList:(链式存储)是双向列表

1、LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。

2、LinkedList 实现 List 接口,能对它进行队列操作。

3、LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。

4、LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。

5、LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。

6、LinkedList 是非同步的。

7、LinkedList相对于ArrayList来说,是可以快速添加,删除元素,ArrayList添加删除元素的话需移动数组元素,可能还需要考虑到扩容数组长度。

8、LinkedList是基于链表实现的,因此插入删除效率高,查找效率低

9、LinkedList是基于链表实现的,因此不存在容量不足的问题,所以这里没有扩容的方法

 

多数情况下如果查询操作较多ArrayList的效果更好.如果删除,插入较多LinkedList的效果较好.

 

9、集合--ArrayList和LinkedList的一些对比

标签:顺序存储   abstract   操作   顺序存储结构   deque   反序列化   插入   object   bst   

原文地址:https://www.cnblogs.com/Mrchengs/p/10848882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!