[原创]关于ArrayList和LinkedList的测试

前言:最近在修改别人做的一个Android 实时处理大量数据的app,结果手机、平板总是发烫厉害,

           在找问题出在哪里,后来怀疑当初大量用了ArrayList,在这里做一个关于ArrayList和LinkedList的测试:


          定义一个900,000,也就是90万长的数组,里面分别放1,2,3......900000,数组的每一个元素放进ArrayList和LinkedList里面去。

代码如下:

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;

import org.omg.CORBA.PRIVATE_MEMBER;

public class MyCollectionTest {
	private static final int Num = 900000;
	public static void main(String[] args) 
	{
		
		String[] tst1 = new String[Num];
		
		for (int i = 0; i < Num; i++)
		{
			tst1[i] = String.valueOf(i);      //生成一个90万长的String数组
		}
		
		ArrayList<String> aL =new ArrayList<String>();
		for (int i = 0; i < Num; i++) 
		{
			aL.add(tst1[i]);                  //数组元素加到ArrayList里面
		}
		LinkedList<String> ll = new LinkedList<String>();
		for (int i = 0; i < Num; i++) 
		{
			ll.add(tst1[i]);                   //数组元素加到LinkedList里面
		}
		//测试1:先测试两者的迭代
		long startTime = System.currentTimeMillis();
		for(Iterator<String> iterator= aL.iterator();iterator.hasNext();)
		{
			iterator.next();                  
		}
		System.out.println("迭代ArrayList集合元素的时间:"+ (System.currentTimeMillis()-startTime));
		
		startTime = System.currentTimeMillis();
		for (Iterator<String> iterator= ll.iterator(); iterator.hasNext();) 
		{
			iterator.next();
		}
		System.out.println("迭代LinkedList集合元素的时间:"+ (System.currentTimeMillis()-startTime));		
		//测试2,测试删除元素
		long len1 = aL.size();
		long len2 = ll.size();
		startTime = System.currentTimeMillis();
		for (int i = 0; i < len1; i++) 
		{
			aL.remove(0);
		}
		System.out.println("删除ArrayList集合元素的时间:"+ (System.currentTimeMillis()-startTime));
		
		startTime = System.currentTimeMillis();		
		for (int i = 0; i < len2; i++) 
		{
			ll.remove(0);
		}
		System.out.println("删除linkedList集合元素的时间:"+ (System.currentTimeMillis()-startTime));
	}
}
结果如下:

 

测试平台:



结论:

         对于ArrayList和LinkedList来讲,迭代时间差不多,多次测试,两者迭代的速度交替领先,不好说优劣。


        但是对于增加、删除操作,在这里,ArrayList是LinkedList的1000倍!

       而当初的Android App用的数据大多是增加和删除(这个也是这里测试删除的原因),真的难为了手机了。。。


个人结论:

          ArrayList是基于一个动态数组的List的实现类,比较适合通过下标来进行无规律存取,如:get(index)方法

          而LinkedList是基于链表的LinkedList类,比较适合做增加、删除操作(底层通过修改引用的值就可以了)


          ArrayList和LinkedList的兄弟关系


有空再测试增加和删除都进行的情况~


如有不当,请指教!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章