首先ArrayList、LinkedList均属于List的公共集合类,有序可重复集合。
他们的不同点:
1.ArrayList是实现了基于动态数组的数据结构(Object[] elementData),LinkedList基于链表的数据结构(Node<E> {E item;Node<E> next;Node<E> prev;)。
2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList占优势,因为ArrayList要移动数据。
注意:
add方法是在某个指定的位置加上某个对象,并将原来的位置的那个对象向后挤了一格.
源码如下:
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
set方法是将原来位置上的那个给取代了,并将原来位置上对象的返回.
public void set(E e) {
if (lastRet < 0)
throw new IllegalStateException();
checkForComodification();
try {
ArrayList.this.set(lastRet, e);
} catch (IndexOutOfBoundsException ex) {
throw new ConcurrentModificationException();
}
}