本文主要是介绍【java笔试系列三】ArrayList和LinkList,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、区别
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
- 对于**随机访问**get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
- 对于**新增和删除操作**add和remove,LinedList比较占优势,因为ArrayList要移动数据。
二、效率测试
static final int N=50000;2 static long timeList(List list){3 long start=System.currentTimeMillis();4 Object o = new Object();5 for(int i=0;i<N;i++) {6 list.add(0, o);7 }8 return System.currentTimeMillis()-start;9 }
10 static long readList(List list){
11 long start=System.currentTimeMillis();
12 for(int i=0,j=list.size();i<j;i++){
13
14 }
15 return System.currentTimeMillis()-start;
16 }
17
18 static List addList(List list){
19 Object o = new Object();
20 for(int i=0;i<N;i++) {
21 list.add(0, o);
22 }
23 return list;
24 }
25 public static void main(String[] args) {
26 System.out.println("ArrayList添加"+N+"条耗时:"+timeList(new ArrayList()));
27 System.out.println("LinkedList添加"+N+"条耗时:"+timeList(new LinkedList()));
28
29 List list1=addList(new ArrayList<>());
30 List list2=addList(new LinkedList<>());
31 System.out.println("ArrayList查找"+N+"条耗时:"+readList(list1));
32 System.out.println("LinkedList查找"+N+"条耗时:"+timeList(list2));
当我们在集合中装5万条数据,测试运行结果如下:
显然我们可以看出ArrayList更适合读取数据,linkedList更多的时候添加或删除数据。
总结:
- ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。
- LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。
转载:http://www.cnblogs.com/huzi007/p/5550440.html
这篇关于【java笔试系列三】ArrayList和LinkList的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!