在做應用性能優(yōu)化時,常發(fā)現(xiàn)因為數(shù)據(jù)類型使用不當導致的性能、資源浪費問題,甚至老手也常發(fā)生此類失誤,因此想盤點一下,搞一個類似叫做"quick page"的東東。
歡迎修訂增補。
Java util之常用數(shù)據(jù)類型特性盤點
java.util就相當于c++的STL,是Java的一個非常重要的包,有很多常用的數(shù)據(jù)類型,不同數(shù)據(jù)類型有不同的用途,而有些數(shù)據(jù)類似乎很相似,怎樣選擇應用,就需要對它們進行辨析。
下面列出了這些數(shù)據(jù)類型的特點,根據(jù)這些特點,就可以有針對性的選用
* 藍色為接口,綠色為具體實現(xiàn)類
* 縮進的層次結構,就是implement或extend的層次關系
* 每個接口或類都具備其所有上層接口、類的特性
Collection
........|--------List
........|..........|----------ArrayList
........|..........|----------Vector
........|..........|.............|-----Stack
........|..........|----------LinkedList
........|--------Set
...................|----------HashSet.
...................|.............|-----LinkedHashSet
...................|----------SortedSet
.................................|-----TreeSet
Iterator
.....|-------ListIterator
Map
.....|------Hashtable
.....|..........|------Properties
.....|------HashMap
.....|..........|------LinkedHashMap
.....|------WeakHashMap
.....|------SortedMap
................|------TreeMap
Collection.
●..實現(xiàn)該接口及其子接口的所有類都可應用clone()方法,并是序列化類.
.....List.
.....●..可隨機訪問包含的元素
.....●..元素是有序的
.....●..可在任意位置增、刪元素
.....●..不管訪問多少次,元素位置不變
.....●..允許重復元素
.....●..用Iterator實現(xiàn)單向遍歷,也可用ListIterator實現(xiàn)雙向遍歷
..........ArrayList
..........●..用數(shù)組作為根本的數(shù)據(jù)結構來實現(xiàn)List
..........●..元素順序存儲
..........●..新增元素改變List大小時,內部會新建一個數(shù)組,在將添加元素前將所有數(shù)據(jù)拷貝到新數(shù)組中
..........●..隨機訪問很快,刪除非頭尾元素慢,新增元素慢而且費資源
..........●..較適用于無頻繁增刪的情況
..........●..比數(shù)組效率低,如果不是需要可變數(shù)組,可考慮使用數(shù)組
..........●..非線程安全
.
..........Vector.
..........●..另一種ArrayList,具備ArrayList的特性
..........●..所有方法都是線程安全的(雙刃劍,和ArrayList的主要區(qū)別)
..........●..比ArrayList效率低
...............Stack
...............●..LIFO的數(shù)據(jù)結構
..........LinkedList.
..........●..鏈接對象數(shù)據(jù)結構(類似鏈表)
..........●..隨機訪問很慢,增刪操作很快,不耗費多余資源
..........●..非線程安全
.....Set.
.....●..不允許重復元素,可以有一個空元素
.....●..不可隨機訪問包含的元素
.....●..只能用Iterator實現(xiàn)單向遍歷
..........HashSet
..........●..用HashMap作為根本數(shù)據(jù)結構來實現(xiàn)Set
..........●..元素是無序的
..........●..迭代訪問元素的順序和加入的順序不同
..........●..多次迭代訪問,元素的順序可能不同
..........●..非線程安全
...............LinkedHashSet
...............●..基于HashMap和鏈表的Set實現(xiàn)
...............●..迭代訪問元素的順序和加入的順序相同
...............●..多次迭代訪問,元素的順序不便
...............●..因此可說這是一種有序的數(shù)據(jù)結構
...............●..性能比HashSet差
...............●..非線程安全
..........SortedSet
..........●..加入SortedSet的所有元素必須實現(xiàn)Comparable接口
..........●..元素是有序的
...............TreeSet.
...............●..基于TreeMap實現(xiàn)的SortedSet
...............●..排序后按升序排列元素
...............●..非線程安全
-----------------------------------
Iterator..
●..對Set、List進行單向遍歷的迭代器
..........ListIterator.
..........●..對List進行雙向遍歷的迭代器
-----------------------------------
Map
●..鍵值對,鍵和值一一對應
●..不允許重復的鍵.
.....Hashtable.
.....●..用作鍵的對象必須實現(xiàn)了hashcode()、equals()方法,也就是說只有Object及其子類可用作鍵
.....●..鍵、值都不能是空對象
.....●..多次訪問,映射元素的順序相同
.....●..線程安全的
..........Properties
..........●..鍵和值都是字符串
.....HashMap
.....●..鍵和值都可以是空對象
.....●..不保證映射的順序
.....●..多次訪問,映射元素的順序可能不同
.....●..非線程安全
...............LinkedHashMap
...............●..多次訪問,映射元素的順序是相同的
...............●..性能比HashMap差
.....WeakHashMap..
.....●..當某個鍵不再正常使用時,垃圾收集器會移除它,即便有映射關系存在
.....●..非線程安全
.....SortedMap.
.....●..鍵按升序排列
.....●..所有鍵都必須實現(xiàn).Comparable.接口.
...............TreeMap.
...............●..基于紅黑樹的SortedMap實現(xiàn)
...............●..非線程安全