关于ArrayList和LinkedList的效率问题,
关于ArrayList和LinkedList的效率问题,
ArrayList在查找数据比较快。
LinkedList则在增加删除数据比较快。
ArrayList底层是用数组来保存对象的,这种方式将对象放在连续的位置中。
优点:可以通过数组下标快速的拿到值,大量修改时高效。
缺点:每一次添加和删除都需要将操作的元素后面的元素们全部移动,非常麻烦。
LinkedList则是将对象放在独立的空间中,而且在每一个空间中存放下一个链接的索引。
优点:增加和删除非常快速。
缺点:要定位元素的位置时,要从头一个一个寻找,耗费资源。
ArrayList底层实现是数组,插入元素的话当然很麻烦,后面的元素都要移位
LinkedList底层是链表,插入元素,只要打断这个节点插入元素即可。
一半情况下,用ArrayList就可以了,如果涉及到频繁的插入和删除数据,用LinkedList,另外Java里面的Queue(队列)和Stack(栈)也是依赖LinkedList实现的。
以下是我的实现例子:(注:结果在不同电脑配置下,可能不一样,但是在大方向上是一样的)
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListTest {
public static long getArrayListFindTime(){
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 71000; i++) {
list.add(0,"s");
}
long start = System.currentTimeMillis();
for (int i = 0; i < 71000; i++) {
list.get(i);
}
long end = System.currentTimeMillis();
return end-start;
}
public static long getLinkedListFindTime(){
LinkedList<String> list = new LinkedList<String>();
for (int i = 0; i < 71000; i++) {
list.add(0,"s");
}
long start = System.currentTimeMillis();
for (int i = 0; i < 71000; i++) {
list.get(i);
}
long end = System.currentTimeMillis();
return end-start;
}
public static long getLinkedListAddTime(){
LinkedList<String> list = new LinkedList<String>();
long start = System.currentTimeMillis();
for (int i = 0; i < 71000; i++) {
list.add(0,"s");
}
long end = System.currentTimeMillis();
return end-start;
}
public static long getArrayListAddTime(){
ArrayList<String> list = new ArrayList<String>();
long start = System.currentTimeMillis();
for (int i = 0; i < 71000; i++) {
list.add(0, "s");
}
long end = System.currentTimeMillis();
return end-start;
}
public static void main(String[] args) {
//用LinkedList完成71000次添加操作所需的时间为10ms
System.out.println(getLinkedListAddTime());
//用ArrayList完成71000次添加操作所需的时间为1000ms
System.out.println(getArrayListAddTime());
//用LinkedList完成71000次查询操作所需的时间为2871ms
System.out.println(getLinkedListFindTime());
//用ArrayList完成71000次查询操作所需的时间为0ms
System.out.println(getArrayListFindTime());
}
}
相关文章
- 暂无相关文章
用户点评