数据插入操作
/**
* @param list 需要进行操作的list
* @param cap 控制插入位置
* @param l 打印值
* */
public void dataAdd(List list,int cap,String l){
long startTime=System.currentTimeMillis();
for(int i=0;i<100000;i++){
list.add(i/cap*2,"测试"+i);
}
long time=System.currentTimeMillis()-startTime;
System.out.println(l+" 插入耗时:"+time);
}
数据查找操作
查找下标
public void find(List list,String l){
//随机查找1000个数耗时
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
int t= (int)(1+Math.random()*(100000-1+1));
// list.contains("测试"+t);
list.get(t);
}
从尾部插入
@Test
public void testl(){
List<String> list=new ArrayList<>();
List<String> list2=new LinkedList<>();
dataAdd(list,2,"ArrayList");
dataAdd(list2,2,"LinkedList");
find(list,"ArrayList");
find(list2,"LinkedList");
}
尾部插入100000条数据
arrayList要比linkedlist慢
查找时,arraylist要比linkedlist快,查找下标
修改插入部分代码,尾插,插入1000000条数据
结果为
此时,arrayList要比linkedlist快
修改cap为4,从list中间插入
arrayList要比linkedlist快十倍
修改cap为6,8,10,等数据
改为6:
ArrayList 插入耗时:798
LinkedList 插入耗时:2774
改为8
ArrayList 插入耗时:903
LinkedList 插入耗时:2137
改为10:
ArrayList 插入耗时:1019
LinkedList 插入耗时:1962
插入位置,越靠近头部,耗时越接近
使用头插法:
ArrayList 插入耗时:1230
LinkedList 插入耗时:14
总结:
若使用头插法插入数据,使用linkedList效率大于arrayList
使用尾插法,数据量过大时,arrayList效率高于LinkedList,
若根据下标查找数据:arrayList效率高
若根据值来查找数据,arrayList和LinkedList效率差不多。