ArrayList是数组结构,所以用下标查询的速度比较快,但是插入和删除元素速度较慢。
LikedList是链表结构,所以插入删除元素的时间复杂度较好,但是查询需要遍历元素,导致效率较低。
一般情况下,用ArrayList就可以了,如果涉及到频繁的插入和删除元素,这个时候考虑使用LinkedList。
List<Integer> arraylist = new ArrayList<Integer>();
long start = System.currentTimeMillis();
for(int i=0;i<200000;i++){
arraylist.add(i);//向集合尾部添加元素
}
long end = System.currentTimeMillis();//毫秒单位
System.out.println("ArrayList向集合尾部添加元素需要的时间"+(end-start));
long start1 = System.currentTimeMillis();
for(int i=0;i<200000;i++){
arraylist.add(arraylist.size()/2,i);//向集合中间位置添加元素
}
long end1 = System.currentTimeMillis();//毫秒单位
System.out.println("ArrayList向集合中间位置添加元素需要的时间"+(end1-start1));
long start2 = System.currentTimeMillis();
for(int i=0;i<200000;i++){
arraylist.add(0,i);//向集合头部添加元素
}
long end2 = System.currentTimeMillis();//毫秒单位
System.out.println("ArrayList向集合头部添加元素需要的时间"+(end2-start2));
long start3 = System.currentTimeMillis();
for(int i=0;i<200000;i++){
arraylist.get(i);//向集合尾部添加元素
}
long end3 = System.currentTimeMillis();
System.out.println("ArrayList查询元素需要的时间"+(end3-start3));
运行结果(毫秒为单位):
ArrayList向集合尾部添加元素需要的时间7
ArrayList向集合中间位置添加元素需要的时间3371
ArrayList向集合头部添加元素需要的时间11572
ArrayList查询元素需要的时间3
LinkedList<Integer> linkedlist = new LinkedList<Integer>();
long start = System.currentTimeMillis();
for(int i=0;i<200000;i++){
linkedlist.add(i);//向集合尾部添加元素
}
long end = System.currentTimeMillis();//毫秒单位
System.out.println("LinkedList向集合尾部添加元素需要的时间"+(end-start));
long start1 = System.currentTimeMillis();
for(int i=0;i<200000;i++){
linkedlist.add(linkedlist.size()/2,i);//向集合中间添加元素
}
long end1 = System.currentTimeMillis();//毫秒单位
System.out.println("LinkedList向集合中间添加元素需要的时间"+(end1-start1));
long start2 = System.currentTimeMillis();
for(int i=0;i<200000;i++){
linkedlist.addFirst(i);//向集合中间添加元素
}
long end2 = System.currentTimeMillis();//毫秒单位
System.out.println("LinkedList向集合头部添加元素需要的时间"+(end2-start2));
运行结果(毫秒为单位):
LinkedList向集合尾部添加元素需要的时间11
LinkedList向集合中间添加元素需要的时间142921
LinkedList向集合头部添加元素需要的时间7