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