1. 程式人生 > >Java 1.8新特性 - 概述

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