Java中ArrayList和LinkedList效率,
分享于 点击 4964 次 点评:252
Java中ArrayList和LinkedList效率,
开发中常用list集合,但是一直不清楚ArryList和LinkedList的效率有何区别,所以今天写了点demo,做个记录
1.直接遍历整个集合
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListTest
{
public static void main(String[] args)
{
List<String> arrayList = new ArrayList<String>();
List<String> linkedList = new LinkedList<String>();
for(int i = 0; i < 10000000; i++)
{
arrayList.add("a");
linkedList.add("a");
}
long startArray = System.currentTimeMillis();
for(String a : arrayList)
{
if("b".equals(a))
{
System.out.println(a);
}
}
System.out.println("arrayList耗时:"+(System.currentTimeMillis()-startArray));
long startLinked = System.currentTimeMillis();
for(String b : linkedList)
{
if("b".equals(b))
{
System.out.println(b);
}
}
System.out.println("linkedList耗时:"+(System.currentTimeMillis()-startLinked));
}
}
执行结果:
arrayList耗时:106
linkedList耗时:169
给list集合放入10000000个字符串,简单遍历,ArrayList的效率明显优于LinkedList
2.在list开头插入数据
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListTest
{
public static void main(String[] args)
{
List<String> arrayList = new ArrayList<String>();
List<String> linkedList = new LinkedList<String>();
for(int i = 0; i < 100000; i++)
{
arrayList.add("a");
linkedList.add("a");
}
long startArray = System.currentTimeMillis();
for(int i = 0; i < 100000; i++)
{
arrayList.add(0,"b");
}
System.out.println("arrayList耗时:"+(System.currentTimeMillis()-startArray));
long startLinked = System.currentTimeMillis();
for(int i = 0; i < 100000; i++)
{
linkedList.add(0,"b");
}
System.out.println("linkedList耗时:"+(System.currentTimeMillis()-startLinked));
}
}
执行结果
arrayList耗时:11411
linkedList耗时:19
给list集合放入100000个字符串,在list开头分别插入同样的100000个字符串,LinkedList效率明显优于ArrayList,相差很大。
3.同2一样的代码,在List集合中间位置(第50000处)插入100000个字符串,执行结果:
arrayList耗时:3960
linkedList耗时:21210
在List集合中间位置(第50000处)插入100000个字符串,ArrayList的执行效率反而高于LinkedList。说明和位置是有关系的。
4.在list结尾添加数据
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListTest
{
public static void main(String[] args)
{
List<String> arrayList = new ArrayList<String>();
List<String> linkedList = new LinkedList<String>();
for(int i = 0; i < 100000; i++)
{
arrayList.add("a");
linkedList.add("a");
}
long startArray = System.currentTimeMillis();
for(int i = 0; i < 10000000; i++)
{
arrayList.add("b");
}
System.out.println("arrayList耗时:"+(System.currentTimeMillis()-startArray));
long startLinked = System.currentTimeMillis();
for(int i = 0; i < 10000000; i++)
{
linkedList.add("b");
}
System.out.println("linkedList耗时:"+(System.currentTimeMillis()-startLinked));
}
}
执行结果
arrayList耗时:205
linkedList耗时:5110
给list集合放入100000个字符串,在list结尾分别插入同样的10000000个字符串,同3一样,ArrayList的执行效率高于LinkedList
从上边看出,如果对list只是简单遍历、插入,还是使用ArrayList比较好。只有在list头部插入数据时,LinkedList效率更好。具体的使用那种List,还需要根据项目的实际情况来选择。
另外,在网络上说在容器前1/10处插入数据时,linkedlist性能明显优于arraylist,因为没有项目实际应用场景,我这里没有再写demo测试,有兴趣可以自己本地测试一下。
相关文章
- 暂无相关文章
用户点评