1:HashMap????
????有人會在問你HashMap的時候會問你JDK1.7和1.8有什么變化;
????主要還是HashMap中鏈長度大于8時采取紅黑樹的結(jié)構(gòu)存儲跟畅。(1.7的時候是鏈表結(jié)構(gòu))
????紅黑樹,除了添加溶推,效率高于鏈表結(jié)構(gòu)徊件。
2:ConcurrentHashMap
????Jdk1.7時隔壁級別CocnurrentLevel(鎖分段機(jī)制)默認(rèn)為16。
????JDK1.8采取了CAS算法
????CAS原理主要涉及的有:鎖機(jī)制蒜危、CAS 操作
????dk1.8沒有永久區(qū)虱痕,取而代之的是MetaSpace元空間,用的是物理內(nèi)存辐赞。
3部翘、Lambda表達(dá)式
? ??1、Lambda表達(dá)式的基礎(chǔ)語法:Java8引入了一個新的操作符“->”响委,該操作符成為箭頭操作符或者Lambda操作符新思,箭頭操作符將Lambda表達(dá)式拆分成兩部分
????左側(cè):Lambda表達(dá)式的參數(shù)列表
????右側(cè):Lambda表達(dá)式中所需執(zhí)行的功能,即Lambda體赘风。
4夹囚、并行流
Fork/Join框架:
在必要的情況下,將一個大任務(wù)進(jìn)行必要的拆分Fork成若干個小任務(wù)邀窃,再將小任務(wù)的運(yùn)算結(jié)果進(jìn)行Join匯總荸哟。
Fork/Join框架和傳統(tǒng)線程池的區(qū)別:
采用“工作竊取”模式(Working-stealing),即當(dāng)執(zhí)行新的任務(wù)時它可以將其拆分分成更小的任務(wù)執(zhí)行瞬捕,并將小任務(wù)加到線程隊(duì)列中鞍历,然后再從一個隨機(jī)線程的隊(duì)列中偷一個并把它放在自己的隊(duì)列中。
相對于一般的線程池實(shí)現(xiàn)山析,fork/join框架的優(yōu)勢體現(xiàn)在對其中包含的任務(wù)的處理方式上堰燎,如果一個線程正在執(zhí)行的任務(wù)由于某些原因無法繼續(xù)運(yùn)行,那么該線程會處于等待狀態(tài)笋轨,而在fork/join框架實(shí)現(xiàn)中秆剪,如果某個子問題由于等待另外一個子問題的完成而無法繼續(xù)運(yùn)行赊淑,那么處理該子問題的線程會主動尋找其他尚未運(yùn)行的子問題來執(zhí)行,這種方式減少了線程等待的時間仅讽,提高了性能陶缺。
并行流就是把一個內(nèi)容分成多個數(shù)據(jù)塊,并用不同的線程分別處理每個數(shù)據(jù)塊的流洁灵。
Java 8 中將并行進(jìn)行了優(yōu)化饱岸,我們可以很容易的對數(shù)據(jù)進(jìn)行并行操作。Stream API 可以聲明性地通過parallel() 與sequential() 在并行流與順序流之間進(jìn)行切換徽千。
5苫费、Optional類
Optional 類(java.util.Optional) 是一個容器類,代表一個值存在或不存在双抽,原來用null 表示一個值不存在百框,現(xiàn)在Optional 可以更好的表達(dá)這個概念。并且可以避免空指針異常牍汹。
常用方法:
Optional.of(T t) : 創(chuàng)建一個Optional 實(shí)例
Optional.empty() : 創(chuàng)建一個空的Optional 實(shí)例
Optional.ofNullable(T t):若t 不為null,創(chuàng)建Optional 實(shí)例,否則創(chuàng)建空實(shí)例
isPresent() : 判斷是否包含值
orElse(T t) : 如果調(diào)用對象包含值铐维,返回該值,否則返回t
orElseGet(Supplier s) :如果調(diào)用對象包含值慎菲,返回該值嫁蛇,否則返回s 獲取的值
map(Function f): 如果有值對其處理,并返回處理后的Optional露该,否則返回Optional.empty()
flatMap(Function mapper):與map 類似睬棚,要求返回值必須是Optional