Android開發之Java集合類性能分析

對於Android開發者來講深刻了解Java的集合類頗有必要主要是從Collection和Map接口衍生出來的,目前主要提供了List、Set和 Map這三大類的集合,今天Android吧(ard8.com)就他們的子類在標準狀況和多線程下的性能作簡單的分析。
php

Collection接口主要有兩種子類分別爲List和Set,區別主要是List保存的對象能夠重複,而Set不能夠重複,而Map通常爲key-value這樣的對應關係,好比咱們經常使用的HashMap。

 

 1、List 主要有ArrayList、LinkedList、Vector和Stack算法

       
       有關這些子類的性能,Android開發網從插入、刪除、移動等方面按照元素的執行效率作一一分析,經過分析Sun 的Java源碼和實際元素操做得出下面結論:

       ArrayList - 他的構造主要從AbstractList實現,主要是判斷下初始元素的容量,ArrayList最大的特色就是提供了Add、Get操做,固然能夠經過迭代器來遍歷,對於元素的存在能夠經過contains方法判斷。

       LinkedList - 做爲一種雙向鏈表結構,對於元素的插入、刪除效率比較高,只須要調整節點指向便可,可是對於隨機查找而言性能主要看這個鏈表長度和運氣了。 LinkedList也提供了ArrayList的get方法,可是要複雜的多,主要經過next或previous方法遍歷獲得。

       Vector - 比較簡單和ArrayList差很少,主要是內部實現了synchronized關鍵字,實現了線程安全訪問但性能有些下降,同時對於元素的擴充在算法上和ArrayList稍有不一樣,經過構造的容量增量係數來決定。

       Stack - 做爲棧的操做,本次繼承於Vector,提供了push,pop和peek方法,peek是不彈出根據數據大小獲取最後一個元素對象。

2、Set 主要有HashSet 和 TreeSet

       HashSet - 該類是從Set接口繼承而來,相對於List而言就是說內部添加的元素不能重複,固然從名字的Hash來看就是經過哈希算法來實現防止衝突來得到防止重複 的,總體上從HashMap實現,存放元素方法的也是相似key- value的對應的,經過迭代器遍歷,不過HashSet不是線程安全的。

       TreeSet - 這個相對於HashSet而言主要是提供了排序支持,TreeSet是從TreeMap類實現,也是非線程安全的。

       能夠看到Set的兩個類都和Map有關,下面就一塊兒看下有關映射(Map)相關的使用。

3、Map 主要有 HashMap 和 TreeMap

       HashMap - 提供了比較強大的功能實現,好比說loadFactor能夠控制元素增加時內存分配,HashMap也是非線程安全的。

       TreeMap - 相對於HashMap它的排序能夠經過傳入包含comparator的屬性來控制。

4、單線程模式下性能測試 ,測試元素100~1000中平均成績 :

       添加  HashMap效率最高,ArrayList最低,其餘的效高的還有Stack、HashSet和Vector,較低的有LinkedList和TreeSet和TreeMap
       刪除 HashMap效率最高,LinkedList最低,其餘的HashSet、TreeMap和TreeSet效率較高,較低的有Vector、ArrayList和Stack
       查找  HashMap效率最高,LinkedList最低,HashXXX和TreeXXX效率都比較高,而基於List類效率耗時是Map或Set的十倍左右。

5、多線程模式下性能測試 ,測試元素100~1000,線程數10箇中平均成績 :

       添加 HashSet效率最高,LinkedList最低,HashXXX和TreeXXX效率都比較高,這裏ArrayList效率較低,總體相差不大。
       刪除 HashSet效率最高,LinkedList最低,總體性能同添加類似,但HashXXX或TreeXXX性能比List系列高出3倍。
       查找 仍然是HashSet性能最好,LinkedList最低,性能較差的是ArrayList,其餘的均表現很好。

       綜上面的單線程和多線程中的測試所述:安全

       Android吧(ard8.com)推薦各位網友開發過程當中,儘可能少用LinkedList這樣的雙向鏈表,總體效率表現不是很好,而HashMap的 性能比較突出綜合起來比較理想,對於ArrayList因爲包含索引表,但對於隨機查找性能很好,表現的比較中規中距。有關集合類專用的併發包 concurrent版本性能 能夠參考Android開發之Java併發包集合類性能分析。
 
多線程

原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=1000&extra=page%3D1併發

相關文章
相關標籤/搜索