Arraylist LinkedList 区别 (读 <Java性能优化> 之List接口笔记 )
来源:互联网 发布:冈仁波齐神秘事件知乎 编辑:程序博客网 时间:2024/05/22 04:51
他们都实现了 List 接口 都不是线程同步的.
ArrayList:无参构造方法
public ArrayList() {this(10); //初始大小为10 }
public ArrayList(int initialCapacity) {super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);this.elementData = new Object[initialCapacity]; }
LinkedList 无参构造方法
private transient Entry<E> header = new Entry<E>(null, null, null); private transient int size = 0; /** * Constructs an empty list. */ public LinkedList() { header.next = header.previous = header; }
添加上的区别
ArrayList. add方法
public boolean add(E e) {ensureCapacity(size + 1); // 确保数组有足够的空间elementData[size++] = e; //将对象添加到末尾.return true; }在看下ensureCapacity 方法
public void ensureCapacity(int minCapacity) {modCount++;int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { //如果数组容量不够 则进行扩容 Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; //扩容到原来空间的1.5倍 if (newCapacity < minCapacity) //如果新空间小于最小的空间容量newCapacity = minCapacity; //则使用最小空间容量 // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); //进行扩容的数组复制} }
LinkedList add方法
public boolean add(E e) {addBefore(e, header); return true; }
private Entry<E> addBefore(E e, Entry<E> entry) {Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);newEntry.previous.next = newEntry;newEntry.next.previous = newEntry;size++;modCount++;return newEntry; }
LinkedList add 将对象添加到herart之前
LinkedList使用了链表结构.因此不需要维护空间的大小. 但是如果频繁的调用会对系统性能上产生一定影响
和ArrayList相比 在add操作的时候 不如add的效率高.
但是在指定插入位置时候 效率LinkedList明显会高于ArrayList
删除任意对象 LinkedList也明显高于ArrayList
在使用 forecah迭代操作时候 两者速度相同
使用传统 for循环 则ArrayList占据优势
对于数组实现ArrayList来说 随机访问(传统for循环)是很快的. 但是LinkedList是基于链表实现的 使用随机访问效果会很差.
- Arraylist LinkedList 区别 (读 <Java性能优化> 之List接口笔记 )
- 《Java程序性能优化》学习笔记之ArrayList和LinkedList
- JAVA [ 性能优化 ArrayList LinkedList]
- 小东吖 之 java List 接口以及 ArrayList集合 LinkedList集合
- List接口下 Arraylist Linkedlist Vector区别
- java基础之集合List-ArrayList、LinkedList、Vector的区别
- 【Java集合之List】ArrayList和LinkedList区别
- java中List、ArrayList、LinkedList的区别
- java List LinkedList ArrayList
- java??List?LinkedList?ArrayList ??
- java、List、ArrayList、LinkedList
- java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
- java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
- java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
- List接口的实现类---ArrayList、LinkedList、Vector之间的区别--------(java复习)
- 菜鸟学Java之List接口之ArrayList与LinkedList浅析
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- JS事件冒泡详解
- java zxing 生成带图片的二维码
- 三星推出跨界手机产品Galaxy S II TV:可当做电视机使用
- c3p0三种配置方式
- Msg 15151 Cannot find the certificate
- Arraylist LinkedList 区别 (读 <Java性能优化> 之List接口笔记 )
- java 代理机制
- 初遇ASCLL码
- iOS App各种图片尺寸(视网膜屏)
- 关于Linux的版本问题
- 关于方法的重写(基础篇)
- 像程序员一样思考
- Linux防火墙详解
- 严重:Servlet.service() for servlet baobaotao threw exception java.lang.IllegalArgumentException