JAVA集合操作注意事項

2021-08-15 05:56:11 字數 2124 閱讀 2475

集合注意事項

一、arraylist

1、arraylist基於陣列方式實現,無容量的限制,不夠時size()*1.5+1;

2、arraylist在執行插入元素時可能要擴容,在刪除元素時並不會減少陣列的容量(如希望相應的縮小陣列容量,可以呼叫arraylist的trimtosize()),在查詢元素時要遍歷陣列,對於非null的元素採取equals的方式尋找;

3、arraylist是非執行緒安全的。

二、linkedlist

1、linkedlist基於雙向鍊錶機制實現;

2、linkedlist在插入元素時,須建立乙個新的entry物件,並切換相應元素的前後元素的引用;在查詢元素時,須遍歷鍊錶;在刪除元素時,要遍歷鍊錶,找到要刪除的元素,然後從鍊錶上將此元素刪除即可;

3、linkedlist是非執行緒安全的。

三、vector

1、vector基於陣列方式實現,無容量的限制。(預設擴容為size()*2)

是基於synchronzized實現的執行緒安全的arraylist,但在插入元素時容易擴充的機制和arraylist稍有不同,並可通過傳入capacityincrement來控制容量的擴充。

四、stack

1、stack基於vector實現,支援lifo。

五、hashset

1、hashset基於hashmap實現,無容量限制;

2、hashset是set介面的實現,set和list最明顯的區別在於set不允許元素重複,而list允許,set為了做到不允許元素重複,採用的是基於hashmap來實現,

3、hashset是無序的,不支援get(int)獲取指定位置的元素。

4、hashset是非執行緒安全的。

六、treeset

1、treeset基於treemap實現,支援排序;

2、treeset是非執行緒安全的。

七、hashmap

0、hashmap是基於陣列和鍊錶來實現對資料的儲存。基於雜湊表實現。

1、將loadfactor設為預設的0.75,threshold設定為12,並建立乙個大小為16的entry物件陣列。

2、hashmap採用陣列方式儲存key、value構成的entry物件,無容量限制。

3、hashmap基於key hash尋找entry物件存放到陣列的位置,對於hash衝突採用鍊錶的方式來解決;

4、hashmap在插入元素時可能會要擴大陣列的容量,(當entry陣列中已用的大小》=threshold,則將entry陣列擴大為當前大小 的兩倍,)在擴大容量時須要重新計算hash,並複製物件到新的陣列中;

5、hashmap是非執行緒安全的。

八、treemap

1、treemap基於紅黑樹實現,無容量限制;(treemap是乙個典型的基於紅黑樹的實現,因此它要求一定要有key比較的方法,要麼傳入comparator實現,要麼key物件實現comparable介面)。

2、treemap是非執行緒安全的。

兩種常規map效能 

hashmap:適用於在map中插入、刪除和定位元素。 

treemap:適用於按自然順序或自定義順序遍歷鍵(key)。 

小結:在實際的使用中首先根據功能需求來選擇是用list、set還是map,list適合於允許重複元素的單個物件集合場景,set適用於不允許重複的單個物件集合場景,map則適用於key-value結構的集合場景。

在選擇好list、set和map後,就要選擇相應的實現類了,

arraylist適用於要通過位置來讀取元素的場景;

linkedlist適用於要頭尾操作及插入指定位置的場景 ;

vector適用於要執行緒安全的arraylist場景;

stack適用執行緒安全的 lifo場景,如需支援fifo,(例如:arrayblockingqueue);

hashset適用於對排序沒有要求的非重複元素的存放;

treeset適用於要排序的非重複元素的存放;

hashmap適用於大部分key-value的訪問場景;

treemap適用於須排序存放的key-value場景,

根據相應的場景選擇以上的類,或其他的一些的類,例如:hashtable,linkedhashset等。

最後要根據場景中需要的儲存的數量、操作(例如增加元素、刪除元素)、併發量來進行相應的效能

java注意事項

將int轉成byte inti 1 integer io newinteger i io.bytevalue split注意點 gson將物件轉換成json串時注意點 用gson將物件轉換成json串時,當物件是null或物件的某個屬性的值是null時,則json串中不會有這個物件或這個物件的某個屬...

Java繼承注意事項

錯誤寫法 class computer1 class computer2 如果想同時繼承兩個父類怎麼辦呢?class computer1 class computer2 extends computer1 class pad extends computer2 class computer1 cla...

java程式設計的注意事項

1.在繼承關係中子類方法的保護等級不能高於父類。2.foreach 迴圈在用於輸出時是沒有角標和計數器的,而是直接丟擲對應陣列元素。3.在迴圈中輸入比較條件是要使用比較運算子 而不能直接使用算數運算子。4.已經初始化的內容要想通過內部方法進行邏輯運算進行賦值時,要將運算方法新增到構造方法中。1.在同...