List(ArrayList、LinkedList)性能分析
Array(长度固定、无修改方法)、ArrayList(长度可变、可修改)、LinkedList(长度可变、可修改):

1.读取性能分析(get())
-
Array、ArrayList 读取性能一致,头部、中部、尾部性能一致(运行时间相差10倍以内)。
-
LinkedList 读取性能:头尾性能一致,和ArrayList 一样快,中部读取性能最差。
2.插入性能分析(add())
-
ArrayList:头部插入慢(因为需要将全部元素向后移动),尾部追加(插入)快,中间比较慢。
-
LinkedList:头尾插入快,中间插入慢(因为要先从头或尾查找到中间元素后,再进行插入)。
3.删除性能分析(remove())
-
ArrayList:头部删除慢(因为需要将全部元素向后移动),尾部删除快,中间比较慢。
-
LinkedList:头尾删除快,中间删除慢(因为要先从头或尾查找到中间元素后,再进行删除)。
4.综合性能分析
-
Array 的读取性能天下无双,ArrayList内部也是数组,读取性能和Array接近.
-
LinkedList 头尾操作(读取\添加\删除)快,中部操作最慢!

5.最佳应用
-
如果需要大量读取操作:ArrayList / Array
-
如果头尾频繁操作(队列\栈):LinkedList
-
综合性能 ArrayList 最佳! 无脑使用!
6.性能测试代码
package list;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Random;
/**
* Array、ArrayList、LinkedList性能测试
*/
public class Demo01 {
public static void main(String[] args) {
//准备实验素材
ArrayList<Integer> list = new ArrayList<>();
Integer[] array = new Integer[100000];
Random random = new Random();
for (int i = 0; i < 100000; i++) {
int n = random.nextInt();
list.add(n);//将数据放到集合中
array[i] = n;//将数据放到数组中
}
LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.addAll(list);
//测试get方法性能
System.out.println("**********读取性能测试结果**********");
//get(0)
getTest(array,list,linkedList,0);
//get(25000)
getTest(array,list,linkedList,25000);
//get(50000)
getTest(array,list,linkedList,50000);
//get(75000)
getTest(array,list,linkedList,75000);
//get(100000)
getTest(array,list,linkedList,100000-1);
System.out.println();
System.out.println("**********添加性能测试结果**********");
//测试add方法性能
addTest(list,linkedList,0);
addTest(list,linkedList,50000);
addTest(list,linkedList,100000-1);
System.out.println();
System.out.println("**********删除性能测试结果**********");
//测试remove方法性能
removeTest(list,linkedList,0);
removeTest(list,linkedList,50000);
removeTest(list,linkedList,100000-2);
}
/**
* 测试Array、ArrayList、LinkedList查询性能
* @param array
* @param list
* @param linkedList
* @param index
*/
public static void getTest(Integer[] array,ArrayList<Integer> list,