集合注意事項
一、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.在同...