ArrayList:
基于动态数组(自动扩容),连续内存存储,由于底层是数组,适合使用下标进行访问,但扩容一直都是数组的缺点,所以使用尾插法进行扩容可以有效提高扩容效率。还有就是创建ArrayList时可以预估所需要的内存空间,避免减少扩容的次数,利用好这两点可以极大的提高ArrayList的性能也可与LinkedList一较高下。
LinkedList:
基于链表,可以存储在分散的内存中,内存空间紧缺时的第一首选,适合做数据的插入和删除,不适合做查询,需要逐一遍历linkedList必须使用iterator迭代器进行遍历,不能使用for循环 (也不是不能使用,效率低到极致,没人用),因为每次使用for循环的get(i)进行遍历都会重新遍历,性能消耗极大。
另外不能使用indexOf等返回索引,使用indexOf对list进行遍历,当结果为空时会遍历整个列表。
注意:虽然LinkedList的插入和删除很快,但是它的内部维护了一个node节点内部类,每次往LinkedList中新增一个数据都会创建node节点对象,一旦插入的node节点过多就会非常影响LinkedList的性能。