ArrayList与LinkedList大比拼之add和remove
各大公司的Java面试都会考到一些java源码的问题,这个系列我将一一为大家剖析
各种java重要的源码
ArrayList与LinkedList是经常会进行比较的2个类,因为他们都实现了List类
本质上讲,他们底层存储方式是不一样的
这个是ArrayList的底层存储方式,是一个对象数组
而LinkedList底层是什么呢?
这就是LinkedList的一个内部类,也是它的存储方式,其实LinkedList的存储方式就是一个双向链表
所以下面所说的区别,其实也就是数据结构是顺序存储结构和链式存储结构的区别
先看添加,add方法
ArrayList:
各大公司的Java面试都会考到一些java源码的问题,这个系列我将一一为大家剖析
各种java重要的源码
ArrayList与LinkedList是经常会进行比较的2个类,因为他们都实现了List类
本质上讲,他们底层存储方式是不一样的
private transient Object[] elementData;
这个是ArrayList的底层存储方式,是一个对象数组
而LinkedList底层是什么呢?
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
这就是LinkedList的一个内部类,也是它的存储方式,其实LinkedList的存储方式就是一个双向链表
所以下面所说的区别,其实也就是数据结构是顺序存储结构和链式存储结构的区别
先看添加,add方法
ArrayList:
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
public void add(int index, E element) {
rangeCheckForAdd(index);
ensureCapacityInternal(size + 1); // Increments modCount!!
System.arraycopy(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size