? 因为ArrayList使用数据下标直接就获取到数据的内存地址,而LinkedList内部需要循环移动指针到要查询的位置,所以查询操作性能比较低。
? 因为当在ArrayList中插入或删除数据时,ArrayList内部需要将要操作位置后面的数据后移或者前移一位(本质为复制数据),容量不够时还需要进行扩容。而linkedlist内部只需要将指针循环到要操作位置,然后改变要操作位置的node的前后指针即可
? 当使用new ArrayList<>()方法初始化,在第一次add的时候,ArrayList内部默认初始化了一个容量大小为10的数组,当容量不够时,进行自动扩容,扩容后大小增加一半,即10-->15-->22-->33。扩容:重新new一个数组,然后将原数据复制进新数组。
? 插入或删除元素的位置越靠前,ArrayList的速度越慢,反之,插入或删除元素的位置越靠后,ArrayList的速度越快,甚至超越linkedlist,当直接在list尾部添加或删除数据时,Arraylist和LinkedList速度基本一样。
? 因为当list内数据足够多的时候,插入或删除元素的位置越靠前,ArrayList需要移动的数据就越多,而LinkedList需要移动指针的步数却越少
原文:https://www.cnblogs.com/sh-mm/p/12667325.html