集合分為list,set,map 三種,但是只有list和set 是繼承了 collection ,map 則提供從key到value的對映,並且key不能重複,value則可以。
1.list 分為arraylist 和 linkedlist 以及 vector
arraylist:底層的實現方式為動態陣列因為是按順序存放,所以查詢和修改資料較快。
但是也因為在記憶體中連續,所以* 增加和刪除較慢*,最差的情況就是要刪除的是第乙個元素,需要把所有資料全部移動。
linkedlist: 底層的實現方式為鍊錶,所以資料在記憶體中的位址是隨機的,增加和刪除較快,只需要找到這個元素就可以修改刪除而不像arrlylist 需要生成新的陣列以轉移資料。
針對資料的查詢和更改,因為查詢某個元素就需要前乙個元素存放在尾部的位址,所以最差的情況就是要查詢或更改的元素在最後,需要查詢一遍所有的元素,所以查詢和更改的效率不高。
vector由於vector採用了執行緒安全,即某一時刻只能有乙個執行緒來對vector進行讀寫,所以相對效率不高。
**list特點:**list是有序,可重複的。
2.set 分為hashset 和 linkedhashset 以及treeset
hashset: 底層是由hashmap實現的,通過hashset查詢元素,先通過計算hashcode來找到對應的區域,在區域內使用equals()進行元素對比,查詢的效率相對較快,但也因為是通過hashcode來儲存資料,所以hashset不會有重複的值。
linkedhashset: 具備hashset快速查詢的特性,因為是使用了鍊錶來儲存元素,所以在迭代集合時是按元素插入順序輸出的(增刪效能不如hashset)。
treeset:treeset是sortedset介面的唯一實現類,底層的實現方式是基於treemap的二叉樹結構,可以通過treeset來獲取有序的set,treeset有兩種排序方式,自然排序 和 定製排序。
set特點:set是無序不可重複的。
3.map 分為hashmap linkedhashmap 以及 hashtable
hashmap通過hashcode存放資料,所以無序(hashmap不保證對映順序,更不保證該順序恆久不變)。
linkedhashmap與hashmap不同的是, linkedhashmap 通過乙個雙線的鍊錶來維護hashmap。而該鍊錶定義了迭代順序,這個迭代的順序一般是插入順序。
hashtable:與hashmap的區別是hashmap允許使用null值以及非同步。
map的特點:元素按(key,value)儲存,無序。
這4點微不足道的改變,正在帶我起飛
3個月前,我完全不懂什麼叫個人品牌。我在csdn上純粹是為了寫而寫,完全不知道文章的作者 沉默王二 就是我的個人品牌,就是我以後可以靠它生存的金字招牌。我在2015年就成為csdn的部落格專家了,排名達到1107,但竟然籍籍無名,除了七八個出版社的編輯找我寫書外,再沒有別的資源鏈結到我 變現 和我之...
任何乙個偉大的目標,都有乙個微不足道的開始。
2020年3月7號,洛谷試煉場離開了我們.任何乙個偉大的目標,都有乙個微不足道的開始。p1000 超級瑪麗遊戲 p1001 a b problem p1421 小玉買文具 p1425 小魚的游泳時間 p1422 小玉家的電費 p1085 不高興的津津 p1089 津津的儲蓄計畫 p1909 買鉛筆 ...