Java 1.8新特性 - 概述
1.1 函數語言程式設計簡介
我們最常用的面向物件程式設計(Java)屬於指令式程式設計(Imperative Programming)這種程式設計正規化。常見的程式設計正規化還有邏輯式程式設計(Logic Programming),函數語言程式設計(Functional Programming)。
函數語言程式設計作為一種程式設計正規化,在科學領域,是一種編寫計算機程式資料結構和元素的方式,它把計算過程當做是數學函式的求值,而避免更改狀態和可變資料。
函數語言程式設計並非近幾年的新技術或新思維,距離它誕生已有大概50多年的時間了。它一直不是主流的程式設計思維,但在眾多的所謂頂級程式設計高手的科學工作者間,函數語言程式設計是十分盛行的。
1.2新特性簡介
在jdk1.8中對hashMap等map集合的資料結構優化。hashMap資料結構的優化
原來的hashMap採用的資料結構是雜湊表(陣列+連結串列),hashMap預設大小是16,一個0-15索引的陣列,如何往裡面儲存元素,首先呼叫元素的hashcode
方法,計算出雜湊碼值,經過雜湊演算法算成陣列的索引值,如果對應的索引處沒有元素,直接存放,如果有物件在,那麼比較它們的equals方法比較內容
如果內容一樣,後一個value會將前一個value的值覆蓋,如果不一樣,在1.7的時候,後加的放在前面,形成一個連結串列,形成了碰撞,在某些情況下如果連結串列
無限下去,那麼效率極低,碰撞是避免不了的
載入因子:0.75,陣列擴容,達到總容量的75%,就進行擴容,但是無法避免碰撞的情況發生
在1.8之後,在陣列+連結串列+紅黑樹來實現hashmap,當碰撞的元素個數大於8時 & 總容量大於64,會有紅黑樹的引入
除了新增之後,效率都比連結串列高,1.8之後連結串列新進元素加到末尾
ConcurrentHashMap (鎖分段機制),concurrentLevel,jdk1.8採用CAS演算法(無鎖演算法,不再使用鎖分段),陣列+連結串列中也引入了紅黑樹的使用
jdk1.8新特性知識點:
Lambda表示式,閉包
函式式介面
*方法引用和構造器呼叫
Stream API
資料並行化操作
介面中的預設方法和靜態方法
新時間日期API