[原創]關於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的兄弟關係


有空再測試增加和刪除都進行的情況~


如有不當,請指教!



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