結構:
collection
├list
│├linkedlist
│├arraylist
│└vector
│ └stack
└set
map├hashtable
├hashmap
└weakhashmap
區別:
類是否有序
是否執行緒安全
是否允許重複
是否允許空值
常用情景
描述總結
linkedlist有序否
是是對於新增和刪除操作add
和remove
,linedlist比較佔優勢,因為
arraylist
要移動資料。
linkedlist基於
雙向鍊錶的資料結構
若只對單條資料插入或刪除,arraylist
的速度反而優於
linkedlist
。但若是批量隨機的插入刪除數 據,
linkedlist
的速度大大優於
arraylist.
因為arraylist
每插入一條資料,要移動插入點及之後的所有資料。
arraylist有序否
是是對於隨機訪問get
和set
,arraylist
覺得優於
linkedlist
,因為linkedlist
要移動指標
arraylist是實現了基於動態陣列的資料結構
vector 有序
是是是如果集合中的元素的數目大於目前集合陣列的長度時,vector
增長率為目前陣列長度的
100%,
而arraylist
增長率為目前陣列長度的
50%.
如過在集合中使用資料量比較大的資料,用
vector
有一定的優勢
stack 有序
stack繼承自
vector
,實現乙個後進先出的堆疊
set
否set是一種不包含重複的元素的
collection
,即任意的兩個元素e1和
e2都有
e1.equals(e2)=false
,set
最多有乙個
null
元素hashtable
無序執行緒安全是否
任何作為key
的物件都必須實現
hashcode
和equals
方 法,
如果你用自定義的類當作key
的話,要相當小心,按照雜湊函式的定義,如果兩個物件相 同,即
obj1.equals(obj2)=true
,則它們的
hashcode
必須相同,但如果兩個物件不同,則它們的
hashcode
不一定不同,如 果兩個不同物件的
hashcode
相同,這種現象稱為衝突,衝突會導致操作雜湊表的時間開銷增大,所以盡量定義好的
hashcode()
方法,能加快雜湊 表的操作
hashmap
無序執行緒安全是是
hashmap和
hashtable
類似,不同之處在於
hashmap
是非同步的,並且允許
null
,即null value
和null key
。,但是將
hashmap
視為collection
時(values()
方法可返回
collection
),其迭代子操作時間開銷和
hashmap
的容量成比例。因此,如果迭代操作的效能相當重要的話,不要將
hashmap
的初始化容量設得過高,或者
load factor
過低weakhashmap
weakhashmap是一種改進的
hashmap
,它對key
實行「弱引用」,如果乙個
key不再被外部所引用,那麼該
key可以被
gc**
treemap
hashmap通過
hashcode
對其內容進行快速查詢,而
treemap
中所有的元素都保持著某種固定的順序,如果你需要得到乙個有序的結果你就應該使用
treemap
(hashmap
中元素的排列順序是不固定的)
這裡在解釋下arraylist 和 linkedlist區別
arraylist 從名字中可以看出是基於array實現的,array效率很高可是大小固定,並且可以通過下標index直接獲取元素,不用乙個個遍歷,所有arraylist做隨機訪問效率高些,若果是頻繁插入、刪除操作,arraylist就需要頻繁的建立臨時array,刪除選中的元素,再把刪除後的元素放到新的array中去,插入同樣如此,所以效率較linkedlist低。
linkedlist從名字中可以看出是基於link實現(鍊錶),大家知道鍊錶中有乙個指標,取元素是通過指標當前位置然後向左或者向後乙個乙個查詢的,所以隨機訪問慢,但是如果是頻繁插入元素,或者刪除某個元素的效率會高些,因為這時我只用移動下指標就可以了。
JAVA 集合總結
如果涉及到堆疊,佇列等操作,應該考慮用list,對於需要快速插入,刪除元素,應該使用linkedlist,如果需要快速隨機訪問元素,應該使用arraylist。如果程式在單執行緒環境中,或者訪問僅僅在乙個執行緒中進行,考慮非同步的類,其效率較高,如果多個執行緒可能同時操作乙個類,應該使用同步的類。要...
java集合總結
set 其中的值不允許重複,無序的資料結構 list 其中的值允許重複,因為其為有序的資料結構 map 成對的資料結構,健值必須具有唯一性 鍵不能同,否則值替換 list按物件進入的順序儲存物件,不做排序或編輯操作。set對每個物件只接受一次,並使用自己內部的排序方法 通常,你只關心某個元素是否屬於...
Java集合總結
集合和陣列在儲存資料的時候是各有優缺點的,先總結下集合和陣列的區別 1.陣列長度固定,集合長度不固定 2.陣列只能儲存同一型別的元素,集合可以儲存不同資料型別 在引入泛型後,可以規定元素的型別相同 3.陣列可以儲存基本型別也可以儲存引用型別,集合只能儲存引用型別 集合類由兩大介面派生而出 colle...