LinkedList的底层是由链表构成,LinkedList类是List接口得到的实现类,它是一个集合,可以根据索引来随机访问集合中的元素,还实现了Deque接口,它是一个队列,可以被当成双端队列来使用。虽然LinkedList是一个List集合,但是它的实现方式和ArrayList是完全不同的,ArraysList的底层是通过一个动态的Object[]数组来实现的,而LinkedList的底层是通过链表来实现的,因此它的随机访问速度是比较差的,但是它的插入删除操作会很快。
ArrayList就是动态数组,ArrayList是线程不安全的,有序可重复,允许存null。ArrayList的初始容量大小为10,当超过容量后,会进行扩容,以原来的1.5倍扩容,ArrayList最大长度为2^32。ArrayList底层是数组,当删除数组中间的元素,后面的元素都会向前移动。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,这种操作的代价是很高的,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。