ArrayList底层是动态数组,需要连续内存存储,适合下标访问,内部有自动扩容机制,在创建的时候会初始化数组的长度,当数组满了之后,再进行插入操作会触发扩容机制,创建一个新的长度更大的数组,将老数组的数据全部复制到新数组中。如果不是进行尾部插入的话还会涉及到已有元素的移动(将原来的元素全部往后复制一份然后插入新的数据)。如果使用尾插法并且指定初始容量的话可以极大提升性能,甚至超过了linkedList(需要创建大量的node对象)
LinkedList底层是链表,可以存储在分散的内存中,适合做数据的插入以及删除操作,不适合查询,遍历只能使用iterator不能使用for循环,因为每次for循环通过get(i)获取指定元素都需要从头往后边遍历一遍,性能消耗极大,不要试图通过indexof方法获取索引,并利用其进行遍历,因为使用indexOf对List进行了遍历,没有的话会遍历整个列表