不是说LinkedList添加删除元素比ArrayList开销小吗?? 怎么添加元素反而慢呢??import java.util.ArrayList;
import java.util.LinkedList;
public class AddingGroups { public static void main(String[] args) {
//新建一个LinkedList集合
LinkedList<Integer> linkedList = new LinkedList<>();
//新建一个ArrayList集合
ArrayList<Integer> arrayList = new ArrayList<>();
//记录linkedList添加开始时间
Long statTimeLink = System.currentTimeMillis();
//开始添加元素
for(int i = 0;i<1000000;i++){
linkedList.add(i);
}
//记录linkedList添加元素结束时间
Long endTimeLink = System.currentTimeMillis();
//计算linkedList添加用的时间
System.out.println("linkedList添加用的时间是"+(endTimeLink - statTimeLink)+"s");
//记录ArrayList添加开始时间
Long statTimeArray = System.currentTimeMillis();
//开始添加元素
for(int i = 0;i<1000000;i++){
arrayList.add(i);
}
//记录ArrayList添加结束时间
Long endTimeArray = System.currentTimeMillis();
//计算arrayList添加用的时间
System.out.println("ArrayList添加用的时间是"+(endTimeArray - statTimeArray)+"s");
}}运行结果:linkedList添加用的时间是1483s
ArrayList添加用的时间是437s
import java.util.LinkedList;
public class AddingGroups { public static void main(String[] args) {
//新建一个LinkedList集合
LinkedList<Integer> linkedList = new LinkedList<>();
//新建一个ArrayList集合
ArrayList<Integer> arrayList = new ArrayList<>();
//记录linkedList添加开始时间
Long statTimeLink = System.currentTimeMillis();
//开始添加元素
for(int i = 0;i<1000000;i++){
linkedList.add(i);
}
//记录linkedList添加元素结束时间
Long endTimeLink = System.currentTimeMillis();
//计算linkedList添加用的时间
System.out.println("linkedList添加用的时间是"+(endTimeLink - statTimeLink)+"s");
//记录ArrayList添加开始时间
Long statTimeArray = System.currentTimeMillis();
//开始添加元素
for(int i = 0;i<1000000;i++){
arrayList.add(i);
}
//记录ArrayList添加结束时间
Long endTimeArray = System.currentTimeMillis();
//计算arrayList添加用的时间
System.out.println("ArrayList添加用的时间是"+(endTimeArray - statTimeArray)+"s");
}}运行结果:linkedList添加用的时间是1483s
ArrayList添加用的时间是437s
楼主的示例中,顺序存取,把LinkedList当做ArrayList来用了,速度自然拼不过ArrayList了。
for(int i = 0;i<1000000;i++){
arrayList.add(new Random.next(1000000),i);
}
目测就是写一句LinkedList添加删除快,ArrayList访问快之类的话误导初学者
这样含糊其辞还不如不说如果你想知道究竟他们两个在不同情况下谁快谁慢,那请直接看源码,源码看懂了你自然知道答案了,什么叫看懂了?就是当你意识到你对于这个问题写一篇专题文章都不一定讲得清的时候
如果你只是想知道写代码应该用哪个,那么99%的情况用ArrayList,还有1%的情况是:
1、超大List,超大指至少十几万个元素,并且还需要频繁添加删除,但不需要频繁访问
2、较大List,指至少几千个元素,需要频繁向Lis t很靠前的地方添加删除元素,但是很少需要访问List靠中间部分的元素
3、当你发现ArrayList比LinkedList耗时多一个数量级的时候
楼上就说得很详细了
链表的话那么 它的插入(给定一个位置)和删除 快,
数组的话,由于存在 下标,那么他的查询就快点。就你这个题说的话,你每次都添加在 末尾位置,,,那么链表的话还有把整个链表遍历一遍达到末尾位置,才进行添加;
数组的话,由于存在索引值,所以直接就可以让索引值+1在赋值,明显,数组的这种添加性能要优于 链表