(hashmap資料結構:在jdk1.8中對hashmap等map集合的資料結構優化。hashmap資料結構的優化 (知識點)
1 原來的hashmap採用的資料結構是雜湊表(陣列+鍊錶),hashmap預設大小是16,乙個0-15索引的陣列,
2 如何往裡面儲存元素: 首先呼叫元素的hashcode 方法,計算出雜湊碼值,經過雜湊演算法算成陣列的索引值,如果對應的索引處沒有元素,直接存放,如果有物件在,那麼比較它們的equals方法比較內容 如果內容一樣,後乙個value會將前乙個value的值覆蓋,如果不一樣,在1.7的時候,後加的放在前面,形成乙個鍊錶,形成了碰撞,在某些情況下如果鍊錶 無限下去,那麼效率極低,碰撞是避免不了的
3 載入因子:0.75,陣列擴容: 達到總容量的75%,就進行擴容,但是無法避免碰撞的情況發生 ;在1.8之後,在陣列+鍊錶+紅黑樹來實現hashmap,當碰撞的元素個數大於8時 & 總容量大於64,會有紅黑樹的引入 ;除了新增之後,效率都比鍊錶高,1.8之後鍊錶新進元素加到末尾
4 concurrenthashmap (鎖分段機制),concurrentlevel,jdk1.8採用cas演算法(無鎖演算法,不再使用鎖分段),陣列+鍊錶中也引入了紅黑樹的使用
底層資料結構: concurrenthashmap在jdk1.7和jdk1.8中的不同
)
JDK1 8的新特性
jdk1.8之前的介面不可以有方法體,但從jdk1.8開始,介面中的方法可以帶有方法體為什麼要新增這個特性?介面就是為了定義乙個標準,這個標準要求所有的實現類實現這些抽象方法。但存在某些方法,所有的實現類 都是一樣的,索性就把這些 挪到介面中。使用的方法?通過default來修飾這個方法public...
JDK1 8新特性簡介
可以用static default來定義介面方法 用default來定義普通方法,這樣子類就不用強制覆寫這個方法了。用static來定義靜態方法 專給lanmda使用的介面加上annotation functionalinte ce 其中只能有乙個方法 使用 引數 程式執行語句 引數 簡單返回 引數...
JDK1 8新特性 方法引用
方法引用是對lamdba的一種優化,因此,能用方法引用的地方,一定能用lamdba表示式。使用lamdba表示式,方法的引數必須是函式式介面,所以使用方法引用也要有乙個函式式介面。前提 物件已經存在,方法已經存在,就能使用了 前提 物件是已經存在的,成員方法也是已經存在的 定義乙個函式式介面 fun...