最近要做个Server端的应用。而且要做些性能方面的优化。
为了能看到ArrayList的循环时间,特别的在ArrayList循环外又增加了100次循环。
改程序的时候,突然想起测试一下各种List性能的差别。程序生成了5万条信息,分别放在ArrayList和LinkedList里。
然后做循环访问。猜猜我看到了什么?呵呵。
ArrayList要比LinkedList快 7000多倍!!!
代码如下:
- package test;
- import java.util.ArrayList;
- import java.util.LinkedList;
- import java.util.Random;
- public class ListTest {
- private static Random random = new Random();
- public static void main(String[] args){
- ArrayList<String> arraylist = new ArrayList();
- LinkedList<String> linkedlist = new LinkedList();
- for(int i=0;i<50000;i++){
- String r = randomString();
- arraylist.add(r);
- linkedlist.add(r);
- }
- System.out.println("arraylist size "+arraylist.size());
- System.out.println("linkedlist size "+linkedlist.size());
- System.out.println("------");
- long begin = System.currentTimeMillis();
- for(int i=0;i<100;i++){
- for(int j=0;j<arraylist.size();j++){
- arraylist.get(j);
- }
- }
- System.out.println("arraylist time "+(System.currentTimeMillis()-begin));
- begin = System.currentTimeMillis();
- for(int j=0;j<linkedlist.size();j++){
- linkedlist.get(j);
- }
- System.out.println("linkedlist time "+(System.currentTimeMillis()-begin));
- }
- protected static String randomString() {
- return Long.toString(random.nextLong(), 36);
- }
- }
哈,看来Java的集合对象还是不要随便用呀。一定要搞清特性再去使用。呵呵
至于速度差异的原理,大家有清楚的帮忙回一下喽。:)