編輯:Android開發實例
對於Android開發者來說深入了解Java的集合類很有必要主要是從Collection和Map接口衍生出來的,目前主要提供了List、Set和 Map這三大類的集合,今天就他們的子類在標准情況和多線程下的性能做簡單的分析。
Collection接口主要有兩種子類分別為List和Set,區別主要是List保存的對象可以重復,而Set不可以重復,而Map一般為key-value這樣的對應關系,比如我們常用的HashMap。
一、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是不彈出根據數據大小獲取最後一個元素對象。
二、Set 主要有HashSet 和 TreeSet
HashSet - 該類是從Set接口繼承而來,相對於List而言就是說內部添加的元素不能重復,當然從名字的Hash來看就是通過哈希算法來實現防止沖突來獲得防止重復 的,整體上從HashMap實現,存放元素方法的也是類似key- value的對應的,通過迭代器遍歷,不過HashSet不是線程安全的。
TreeSet - 這個相對於HashSet而言主要是提供了排序支持,TreeSet是從TreeMap類實現,也是非線程安全的。
可以看到Set的兩個類都和Map有關,下面就一起看下有關映射(Map)相關的使用。
三、Map 主要有 HashMap 和 TreeMap
HashMap - 提供了比較強大的功能實現,比如說loadFactor可以控制元素增長時內存分配,HashMap也是非線程安全的。
TreeMap - 相對於HashMap它的排序可以通過傳入包含comparator的屬性來控制。
四、單線程模式下性能測試 ,測試元素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的十倍左右。
五、多線程模式下性能測試 ,測試元素100~1000,線程數10個中平均成績:
添加 HashSet效率最高,LinkedList最低,HashXXX和TreeXXX效率都比較高,這裡ArrayList效率較低,整體相差不大。
刪除 HashSet效率最高,LinkedList最低,整體性能同添加相似,但HashXXX或TreeXXX性能比List系列高出3倍。
查找 仍然是HashSet性能最好,LinkedList最低,性能較差的是ArrayList,其他的均表現很好。
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
繼上一篇時間和日期設置的示例之後,今天來介紹Android的布局組件中有關於時間和日期的設置的組件,希望對大家有所幫助。具體如下: 時間日期設置組件:TimePi
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩