ArrayList vs LinkedList
ArrayList 和 LinkedList 各自的适用场景
当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用 ArrayList 会有更好的性能;当操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用 LinkedList 了。(对于随机访问 get 和 set,ArrayList 优于 LinkedList,因为 LinkedList 要移动指针。对于新增和删除操作 add 和 remove,LinedList 比较占优势,因为 ArrayList 要移动数据。)
ArrayList 的容量
ArrayList 可以进行扩容(针对 JDK1.8 数组扩容后的容量是扩容前的 1.5 倍 newCap = oldCap + oldCap >> 1)。
ArrayList 源码中最大的数组容量是 Integer.MAX_VALUE-8。
最大还是能支持到 Integer.MAX_VALUE(当 Integer.MAX_VALUE-8 依旧无法满足需求时)。
ArrayList 添加元素
只要 ArrayList 的当前容足够大,add()操作向数组的尾部的效率非常高的,当向数组指定位置添加数据时,会进行大量的数组移动复制操作。而数组复制时,最终将调用 System.arraycopy()方法。
评论