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

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的效果较好.

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

时间: 2024-11-15 00:54:27

9、集合--ArrayList和LinkedList的一些对比的相关文章

ArrayList与LinkedList的性能对比

ArrayList与LinkedList都是继承至Collection对象,内部实现导致性能方面存在一定的区别 插入性能对比 private final static int COUNT = 10000000; private static long insertObject(List<Object> list) { Object obj = new Object(); long startTime = System.currentTimeMillis(); for (int i = 0; i

ArrayList和LinkedList的几种循环遍历方式及性能对比分析

主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论.通过本文你可以了解(1)List的五种遍历方式及各自性能 (2)foreach及Iterator的实现 (3)加深对ArrayList和LinkedList实现的了解.阅读本文前希望你已经了解ArrayList顺序存储和LinkedList链式的结构,本文不对此进行介绍. 相关:HashMap循环遍历方式及其性能对

Java数据结构之表的增删对比---ArrayList与LinkedList之一

一.Java_Collections表的实现 与c不同Java已经实现并封装了现成的表数据结构,顺序表以及链表. 1.ArrayList是基于数组的实现,因此具有的特点是:1.有索引值方便查找,对于get和set操作花费常数时间,2.但是其缺点是:插入/删除某个数据的代价比较大. 2.LinkedList是基于双链表实现,因此具有的特点是:1.基于链表方便插入与删除操作开销较小,2.但是不方便索引,不管是索引哪一个元素都需要从头开始逐次查找. 就增删操作下面举个简单例子:给出一个表(具体实现未知

ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)

主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以了解(1)List的五种遍历方式及各自性能 (2)foreach及Iterator的实现 (3)加深对ArrayList和LinkedList实现的了解. 阅读本文前希望你已经了解ArrayList顺序存储和LinkedList链式的结构,本文不对此进行介绍. 相关:HashMap循环遍历方式及其性

【转】ArrayList和LinkedList的几种循环遍历方式及性能对比分析

原文网址:http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论.通过本文你可以了解(1)List的五种遍历方式及各自性能 (2)foreach及Iterator的实现 (3)加深对ArrayList和LinkedList实现的了解.阅

Java集合之ArrayList和LinkedList的实现原理

ArrayList实现可变数组的原理: 当元素超出数组内容,会产生一个新数组,将原来数组的数据复制到新数组中,再将新的元素添加到新数组中. ArrayList:是按照原数组的50%来延长,构造一个初始容量为10的空列表 用ArrayList模拟数组: 1 package iterater.patten.design; 2 3 //探索ArrayList实现的可变数组的原理,用ArrayList实现一个容器存储对象 4 public class ArrayList { 5 Object[] obj

java集合的实现细节--ArrayList和LinkedList

 ArrayList和LinkedList的实现差异 List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表,ArrayList底层采用动态数组的形式保存每一个集合元素,LinkedList则是一种链式存储的线性表,其本质上就是一个双向链表,它不仅实现了List接口,还实现了Deque接口,Deque代表了一种双端队列,既具有队列(FIFO)的特性,也具有栈(FILO)的特性,也就是说,LinkedList既可以当成双向链表使用,也可以当成队列使用,还可以当成栈来使用. p

集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结

List (链表|线性表) 特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素 1.创建一个用指定可视行数初始化的新滚动列表.默认情况下,不允许进行多项选择. 注意,这是 List(rows, false) 的一种便捷方法.还要注意,列表中的可视行数一旦创建就不能更改. public List(int rows)------------------row-----要显示的项数 2.创建一个初始化为显示指定行数的新滚动列表. 注意,如果指定了零行,则会按默

java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)

说起集合,我们会潜意识里想到另外一个与之相近的名词——数组,OK!两者确实有相似之处,但也正是这点才是我们应该注意的地方,下面简单列出了两者的区别(具体功能的不同学习这篇文章后就会明白了): 数组 长度固定 既可以存储基本数据类型,也能存储引用数据类型 一个数组中的元素类型必一致 集合 长度可变 只能存储引用数据类型 一个集合中的元素类型可以是任意的引用类型 一.集合概述 Collection<E> 父接口 List<E> 子接口 ArrayList<E>类 Vecto