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資料集合:Set與Get效率對比
1 例項測試程式碼 <pre name="code" class="java"> // 1 ArrayList set sort elements and list elements public static void printArrList
Python中的集合:set與frozenset用法舉例
【1】建立: 從list或tuple中建立,我就會這兩種。不能從數字直接建立:a=set(1)錯誤! 1.sa=set(列表) 2.sa=set(tuple) 程式碼: 【2】交集 sc = sa & sb sc=sa.intersection(sb) sc=s
Java中常見資料結構:list與map -底層如何實現
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
java中set與get方法的使用
JAVA中關於set()和get()方法的理解及使用 我們先來看看set和get這兩個詞的表面意思,set是設定的意思,而get是獲取的意思,顧名思義,這兩個方法是對資料進行設定和獲取用的。而且,在類中使用set和get方法時,都是在set和get後面跟上一些特定的詞來形成
Java中常見資料結構:list與map 的底層實現
Collection(單列集合) List(有序,可重複) ArrayList 底層資料結構是陣列,查詢快,增刪慢 執行緒不安全,效率高
Java中常見資料結構:List與Map
1:集合 Collection(單列集合) List(有序,可重複) ArrayList 底層資料結構是陣列,查詢快,增刪慢 執行
Java中集合(List,Set,Map)
比例 正在 earch iterator 試圖 tor 元素 除了 一個 ArrayList 和Vector是采用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,但是插入數據要設計到數組元素移動等內存操作,所以索引數據快插入數據慢
Java語言中:++a與a++小練習 &與&&小練習 |與||小練習 boolean類型小練習
結果 pri 第一題 class 類型 ole true nbsp amp ---------------------------------------------------第一題int x = 1,y = 1; if(x++==2 & ++y==2) //f
Java基礎教程:HashTable與HashMap比較
唯一性 trac 並發 con 元素 散列表 個數 AR 底層 Java基礎教程:HashTable與HashMap比較 1. 關於HashMap的一些說法: a) HashMap實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體。HashMap的底層結構是一個數
Java進階(三)Java安全通訊:HTTPS與SSL
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!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 資料遷移:mydumper與myloader
[[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併發容器:CopyOnWriteArrayList與CopyOnWriteArraySet
生活 所有的程式設計師都劇作家,而所有計算機都是糟糕的演員。 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.