1. 程式人生 > >JAVA資料集合:Set與Get效率對比

JAVA資料集合:Set與Get效率對比

1 例項測試程式碼

<pre name="code" class="java">        // 1 ArrayList set sort elements and list elements
	public static void printArrList() {
		List<String> listLined = new ArrayList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		for (int m = 0; m < listLined.size(); m++) {
			String tempString = listLined.get(m);
		}
		long st4 = System.currentTimeMillis();
		System.out.println("arrayList Get Elements time By normal =" + (st4 - st3));
	}

	// 2 LinedkList set sort elements and list elements
	public static void printLinkedList() {
		List<String> listLined = new LinkedList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < <span style="color:#FF0000;">100000</span>; x++) {
			listLined.add(String.valueOf(x));
		} 
		for (int m = 0; m < listLined.size(); m++) {
			String tempString = listLined.get(m);
		}
		long st4 = System.currentTimeMillis();
		System.out.println("LinkedList Get Elements time  By normal =" + (st4 - st3)); 
	}

	// 3 ArrayList set sort elements and list elements By FOR
	public static void printArrListByFor() {
		List<String> listLined = new ArrayList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		for (String m : listLined) {
			String tempString = m;
		}
		long st4 = System.currentTimeMillis();
		System.out.println("arrayList Get Elements By FOR  with time="
				+ (st4 - st3));
	}

	// 4 LinkedList set sort elements and list elements By FOR
	public static void printLinkedListByFor() {
		List<String> listLined = new LinkedList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		for (String m : listLined) {
			String tempString = m;
		}
		long st4 = System.currentTimeMillis();
		System.out.println("LinkedList Get Elements By FOR  with time="
				+ (st4 - st3));
	}

	// 5 ArrayList set sort elements and list elements By Itorator
	public static void printArrListByItorator() {
		List<String> listLined = new ArrayList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		Iterator<String> iterator = listLined.iterator();
		while( iterator.hasNext() ){ 
			String tempString = iterator.next();
		}
		long st4 = System.currentTimeMillis();
		System.out.println("arrayList Get Elements By Itorator  with time="
				+ (st4 - st3));
	}

	// 6 LinkedList set sort elements and list elements By Itorator
	public static void printLinkedListByItorator() {
		List<String> listLined = new LinkedList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		Iterator<String> iterator = listLined.iterator();
		while( iterator.hasNext() ){ 
			String tempString = iterator.next();
		}
		long st4 = System.currentTimeMillis();
		System.out.println("LinkedList Get Elements By Itorator  with time="
				+ (st4 - st3));
	}

	public static void main(String[] args) {
		for(int x = 1; x <= 5 ; x++ ){
                  System.out.println(" loop test time:" + x);
		printArrList();
			printLinkedList();
			printArrListByFor();
			printLinkedListByFor();
			printArrListByItorator();
			printLinkedListByItorator();
		}
	}




2   3次輸出結果

<pre name="code" class="java">loop test time:1
arrayList Get Elements time By normal =184
LinkedList Get Elements time  By normal =7434
arrayList Get Elements By FOR  with time=218
LinkedList Get Elements By FOR  with time=138
arrayList Get Elements By Itorator  with time=231
LinkedList Get Elements By Itorator  with time=92

 loop test time:2
arrayList Get Elements time By normal =98
LinkedList Get Elements time  By normal =7428
arrayList Get Elements By FOR  with time=185
LinkedList Get Elements By FOR  with time=62
arrayList Get Elements By Itorator  with time=92
LinkedList Get Elements By Itorator  with time=180

 loop test time:3
arrayList Get Elements time By normal =43
LinkedList Get Elements time  By normal =8004
arrayList Get Elements By FOR  with time=104
LinkedList Get Elements By FOR  with time=64
arrayList Get Elements By Itorator  with time=76
LinkedList Get Elements By Itorator  with time=51

 loop test time:4
arrayList Get Elements time By normal =47
LinkedList Get Elements time  By normal =7490
arrayList Get Elements By FOR  with time=109
LinkedList Get Elements By FOR  with time=64
arrayList Get Elements By Itorator  with time=99
LinkedList Get Elements By Itorator  with time=65
 loop test time:5
arrayList Get Elements time By normal =62
LinkedList Get Elements time  By normal =7890
arrayList Get Elements By FOR  with time=44
LinkedList Get Elements By FOR  with time=57
arrayList Get Elements By Itorator  with time=84
LinkedList Get Elements By Itorator  with time=49

注意:1  printArrList(); printArrListByFor(); printLinkedListByFor();printArrListByItorator();處於千萬量級別,

             2 printLinkedList()方法只能處於十萬級別量, printLinkedListByItorator()只能處於百萬量級別,千萬量級別會報:java.lang.OutOfMemoryError: Java heap space

3 結論

1. ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。

 2. 對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。

 3. 對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料 ,但在尾部新增和刪除除外。

4. For(foreach)、Iterator原理都是基於迭代器,區別不大,在獲取元素的時候的時間複雜度是 O(1) (使用了 getNext()hasNext() 方法),最終的時間複雜度為 O(n), 並且兩者有迭代器的記憶體開銷;
    而LinkedList迴圈裡每次在呼叫 get(i) 的時候花費的時間複雜度為 O(n),最終整個迴圈的時間複雜度就是 O(n^2);
        ArrayList迴圈裡每次在呼叫  get(i) 方法的時間複雜度就是 O(1),最終整個迴圈的時間複雜度就是 O(n);

4 建議

  如果不考慮記憶體空間:使用普通的ArrayList 的Iterator 方法遍歷,為最優方案

  考慮記憶體空間:使用普通的ArrayList,並for遍歷為最優方案

相關推薦

JAVA資料集合SetGet效率對比

1 例項測試程式碼 <pre name="code" class="java"> // 1 ArrayList set sort elements and list elements public static void printArrList

Python中的集合setfrozenset用法舉例

【1】建立: 從list或tuple中建立,我就會這兩種。不能從數字直接建立:a=set(1)錯誤! 1.sa=set(列表) 2.sa=set(tuple) 程式碼: 【2】交集 sc = sa & sb sc=sa.intersection(sb) sc=s

Java中常見資料結構listmap -底層如何實現

1:集合 2 Collection(單列集合) 3 List(有序,可重複) 4 ArrayList 5 底層資料結構是陣列,查詢快,增刪慢 6 執行緒不安全,效率高

python基礎資料型別set() (集合)___006

1、集合:可變資料型別,它裡面的元素必須是不可變資料型別,無序,不重複。 2、集合例子:表現形式兩種 set1 = set({1,2,3}) set2 = {1,2,3} print(set1,type(set1)) # {1, 2, 3} <class 'set'> prin

javasetget方法的使用

JAVA中關於set()和get()方法的理解及使用 我們先來看看set和get這兩個詞的表面意思,set是設定的意思,而get是獲取的意思,顧名思義,這兩個方法是對資料進行設定和獲取用的。而且,在類中使用set和get方法時,都是在set和get後面跟上一些特定的詞來形成

Java中常見資料結構listmap 的底層實現

 Collection(單列集合)         List(有序,可重複)             ArrayList                 底層資料結構是陣列,查詢快,增刪慢                 執行緒不安全,效率高        

Java中常見資料結構ListMap

1:集合 Collection(單列集合) List(有序,可重複) ArrayList 底層資料結構是陣列,查詢快,增刪慢 執行

Java集合(List,Set,Map)

比例 正在 earch iterator 試圖 tor 元素 除了 一個 ArrayList 和Vector是采用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,但是插入數據要設計到數組元素移動等內存操作,所以索引數據快插入數據慢

Java語言中++aa++小練習 &&&小練習 |||小練習 boolean類型小練習

結果 pri 第一題 class 類型 ole true nbsp amp ---------------------------------------------------第一題int x = 1,y = 1; if(x++==2 & ++y==2) //f

Java基礎教程HashTableHashMap比較

唯一性 trac 並發 con 元素 散列表 個數 AR 底層 Java基礎教程:HashTable與HashMap比較 1. 關於HashMap的一些說法: a) HashMap實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體。HashMap的底層結構是一個數

Java進階(三)Java安全通訊HTTPSSSL

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java集合set、List和map的遍歷方式

Java中集合類的遍歷方式 Java中集合分為set、List和map。 1.set集合 set集合常用的有兩種遍歷方式: Set<String>  set = new HashSet<String>(); 第一種利用for迴圈: for(S

Java進階物件

  1.類庫中的LocalDate類    (1)Date類與LocalDate類        Date類:例項有一個狀態即特定的時間點。時間是由一個固定時間點的毫秒數     &nbs

java學習筆記方法陣列

方法: 方法的定義與使用: java中方法就是函式,將實現某些功能的程式碼封裝到方法中。 /* 概念:就是完成某個功能的程式碼,函式就是方法 格式: 修飾符 返回值型別 方法名(引數型別 引數名1,引數型別 引數名2....){ 方法體語句: return 返回值:

mysql database 資料遷移mydumpermyloader

[[email protected] ~]# yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake [[

JAVA筆記二物件

一、 物件 類之間關係:依賴、聚合、繼承。 物件與物件變數(c++指標) 更改器方法與訪問器方法(不修改物件) java.time.LocalDate 8 static LocalTime now() static LocalTime of(int year

Java之路物件

一、類 將具有相同屬性及相同行為的一組物件稱為類(class)。廣義地講,具有共同性質的事物的集合就稱為類。 在面向物件程式設計中,類是一個獨立的單位,它有一個類名,其內部包括成員變數,用於描述物件的屬性;還包括類的成員方法,用於描述物件的行為。 在Java程式設計中,類被認為是

JAVA併發容器CopyOnWriteArrayListCopyOnWriteArraySet

生活 所有的程式設計師都劇作家,而所有計算機都是糟糕的演員。 CopyOnWriteArrayList介紹 還記得學集合的時候,學的第一個集合就是ArrayList.它是一個由陣列實現的集合。因為他對陣列的增刪改和查詢都是不加鎖的,所以它並不是執行緒安全的。 因此,我們會引入到一

Java資料結構複數運算大全

public class 複數運算 { void cPlus(double a, double b, double c, double d, double[] e, double[] f) {// 加法 e[0] = a + c; f[0] = b + d; }

Java資料結構割圓術求Π

利用割圓術,將一個圓分割成正多邊形,在利用多邊形邊長=圓周,求Π import java.util.*; public class 割圓術求Π { public static void main(String[] args) { int n; System.