java 集合總結

2021-06-22 14:00:12 字數 2666 閱讀 8056

結構:

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...