java常见集合
? ? 1.HashTable
- ?HashTable是線程安全的,但是效率特別低,因為當一個線程訪問HashTable的同步方法時,其他線程再訪問HashTable的同步方法,會發生阻塞
,如線程1在執行put操作時,線程2不但不能使用put,甚至不能使用get來獲取數據,所以效率非常低下。
- HashTable的鍵值都不能非空,否則會報空指針。
- 實現線程安全的原理,是幾乎HashTable的實現類的public方法都有synchronized來修飾。
? ? 2.HashMap
- HaspMap的實現原理是數組加鏈表,(1.8是數組+鏈表+紅黑樹)
- 是線程不安全的集合,不能用于多線程多并發的情況,其不安全主要是多個線程在put或擴容時形成鏈表環,當通過get執行一個不存在的key時就有可能發生死循環。
- 其中鍵值都可以為空,如果插入相同的鍵則會覆蓋原有的
- 通過key根據hashCode函數來算出hash值,(index =? HashCode(Key) &? (Length?- 1))再用hash值取mod運算得到在數組中的位置,如果數組中該位置沒有值則直接插入,反之,如果數組中有值,?則會插入鏈表中,當鏈表的個數超過8時,將鏈表轉化為紅黑樹的結構。
- 擴容,當數組中的鍵值對超過數組長度x0.75時,數組會自動擴容,一般是采用2倍擴容。
? ? 3.HashSet
- 存儲的數據不可重復,原因是底層是采用HashMap來實現的,其中set的值作為HashMap的鍵存儲,HashMap的值設定一個固定的靜態常對象。
轉載于:https://www.cnblogs.com/yanyy/p/10414162.html
總結
- 上一篇: 高性能索引策略一
- 下一篇: 凭什么,Netty能成为最流行的NIO框