ArrayList与LinkedList的比较

ArrayList 继承AbstractList<E>,实现List、Cloneable和Serializable接口

LinkedList继承AbstractSequentialList<E>,实现List、Cloneable和Serializable接口
 

元素存储方式:

ArrayList 采用数组的方式存储

LinkedList采用链表结构存储

add:

  • 对于元素的add()来说,LinkedList要比ArrayList要快一些,因为ArrayList可能需要额外的扩容操作,当然如果没有扩容,二者没有很大的差别
  • 对于元素的add(int, element),对于LinkedList来说,代价主要在遍历获取插入的位置的元素,而ArrayList的主要代价在于可能有额外的扩容和大量元素的移动
  • 小结:对于简单的元素添加,如果事先知道元素的个数,采用预置大小的ArrayList要更好,反之可以考虑LinkedList

remove:

删除操作中,LinkedList更有优势,一旦找到了删除的节点,它仅仅只是断开链接关系,并没有元素复制移动的行为,而ArrayList不可避免的又要进行元素的移动。

遍历:

按照索引遍历,ArrayList是更好的选择,按照Iterator遍历,也许LinkedList会好一些。

反过来理解,如果是ArrayList,Iterator和index遍历都可以,如果是LinkedList,优先选择Iterator比较好。

其他

  • 对于ArrayList和LinkedList, size() isEmpty() 这些都是常量计算,代价很低
  • LinkedList实现了更多的方法,包括Queue,所以它也是一种队列
  • 对于少量得元素临时存储,优先考虑ArrayList
  • 频繁的添加和删除操作的时候,优先使用LinkedList
  • 频繁的按索引访问遍历,优先使用ArrayList

转自:http://www.xeclipse.com/?p=1324

 

你可能感兴趣的:(比较,ArrayList,LinkedList,差别)