ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList速度优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
补充:List.add(index,Object),例如list.add(0,new Object()),对于Arraylist需要移动数据。如果是List.add(new Object()),ArrayList与LinkedArray速度差别不大。
List.add(new Object()):
static final int N = 50000;
public static long timeList(List list){
long start = System.currentTimeMillis();
Object obj = new Object();
for(int i=0;i<N;i++){
/**注意该处的区别**/
list.add(obj);
}
return System.currentTimeMillis()-start;
}
执行如下的代码:
System.out.println(timeList(new ArrayList())); ------------> 5
System.out.println(timeList(new LinkedList()));------------> 4
List.add(0,new Object()):
static final int N = 50000;
public static long timeList(List list){
long start = System.currentTimeMillis();
Object obj = new Object();
for(int i=0;i<N;i++){
/**注意该处的区别**/
list.add(0,obj);
}
return System.currentTimeMillis()-start;
}
执行如下的代码:
System.out.println(timeList(new ArrayList())); ------------> 214
System.out.println(timeList(new LinkedList()));------------> 5
对于随机的get()和set():
static final int N = 50000;
public static List addList(List list){
Object obj = new Object();
for(int i=0;i<N;i++){
list.add(obj);
}
return list;
}
public static long readList(List list){
//获取纳秒
long start = System.nanoTime();
list.set(20000, new Object());
list.get(20000);
return System.nanoTime()-start;
}
执行如下代码:
List list1 = addList(new ArrayList());
List list2 = addList(new LinkedList());
System.out.println(readList(list1)); ————————》19358
System.out.println(readList(list2)); ————————》790914