Java常用API(part4)
Java API(Part4)
最近剛學(xué)Java,隨便記點(diǎn)學(xué)習(xí)筆記,part4主要是Arrays類的用法
Arrays
操作數(shù)組的工具類

Arrays.toString方法可以方便我們快速查看數(shù)組元素而不是寫循環(huán)遍歷 binarySearch查找的前提:數(shù)組有序且升序.如果要查找的數(shù)據(jù)是存在的,返回的是真實(shí)的索引,如果不存在,返回-插入點(diǎn)-1(負(fù)插入點(diǎn)-1) copyOf方法的底層會根據(jù)新數(shù)組的長度來創(chuàng)建新的數(shù)組,如果新數(shù)組的長度大于老數(shù)組的長度,會補(bǔ)上默認(rèn)初始值0copyOfRange拷貝細(xì)節(jié):起始索引和結(jié)束索引,包頭不包尾,包左不包右 sort默認(rèn)情況下給基本數(shù)據(jù)類型進(jìn)行升序排列,底層使用的是比傳統(tǒng)單軸快速排序更快的雙軸快速排序
如果實(shí)現(xiàn)按特定規(guī)則的排序,可用public static void sort(數(shù)組,排序規(guī)則),只能給引用數(shù)據(jù)類型的數(shù)組進(jìn)行排序.如果數(shù)組是基本數(shù)據(jù)類型的,需要變成其對應(yīng)的包裝類.第二個(gè)參數(shù)是一個(gè)接口,所以在調(diào)用方法的時(shí)候,需要傳遞這個(gè)接口的實(shí)現(xiàn)類對象,作為排序的規(guī)則
底層原理:插入排序+二分查找 默認(rèn)把0索引的數(shù)據(jù)當(dāng)作是有序的序列,1索引到最后認(rèn)為是無序的序列 遍歷無序的序列得到里面每一個(gè)元素,假設(shè)當(dāng)前拿到A元素,把A往有序序列中進(jìn)行插入,插入時(shí)利用二分查找確定A元素的插入點(diǎn),拿著A元素與插入點(diǎn)的元素進(jìn)行比較,比較的規(guī)則就是定義的compare方法的方法體 如果方法的返回值是負(fù)數(shù),拿A繼續(xù)和前面的數(shù)據(jù)進(jìn)行比較 如果方法的返回值是正數(shù)或0,拿A繼續(xù)和后面的數(shù)據(jù)進(jìn)行比較 直到能確定A的最終位置
compare方法的形參 o1:表示在無序序列中遍歷得到的每一個(gè)元素 o2:表示有序序列中的元素
返回值: 正數(shù)和0:表示當(dāng)前要插入的元素是大的,放在后面 負(fù)數(shù):表示當(dāng)前要插入的元素是小的,放在前面
簡單理解: o1-o2:升序 o2-o1:降序
使用Lambda表達(dá)式對上面的代碼進(jìn)行簡化
lambda表達(dá)式(JDK8以后):
函數(shù)式編程(Functional programming)是一種思想特點(diǎn),忽略面向?qū)ο蟮膹?fù)雜語法,強(qiáng)調(diào)做什么而不是誰去做
注意:
lambda表達(dá)式可以用來簡化匿名內(nèi)部類的書寫
lambda表達(dá)式只能簡化函數(shù)式接口的匿名內(nèi)部類的寫法
函數(shù)式接口:有且只有一個(gè)抽象方法的接口叫作函數(shù)式接口,接口上方可以加@FunctionalInterface注解
lambda的省略規(guī)則:
參數(shù)類型可以省略不寫
如果只有一個(gè)餐宿,參數(shù)類型可以省略,同時(shí)()可以省略
如果Lambda表達(dá)式的方法體只有一行,大括號,分號,return可以省略不寫,三者需要同時(shí)省略
核心就是可推導(dǎo),可省略
采用Lambda表達(dá)式省略規(guī)則省略后:
練習(xí)
將字符串?dāng)?shù)組按長度排序
將Person類按年齡,身高,姓名字母的優(yōu)先級排序
往期傳送門:



