大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java技術(shù)編程分享,arrays的用法

Java技術(shù)編程分享,arrays的用法

更新時(shí)間:2020-06-02 16:32:51 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2370次

Arrays

位于java.util包內(nèi)的Arrays類是Java提供的一個(gè)操作數(shù)組的工具類,其內(nèi)部定義了一些常見的用于操作數(shù)組的靜態(tài)方法,下面就按照以下幾個(gè)常用類型,梳理一下。

數(shù)組轉(zhuǎn)List

排序

查找

元素填充

Arrays數(shù)組操作集

數(shù)組轉(zhuǎn)List---asList

Java技術(shù)編程分享,arrays的用法

這個(gè)被“普遍”稱為數(shù)組轉(zhuǎn)List的方法,可能是Arrays內(nèi)大家使用頻率最高的一個(gè)靜態(tài)方法了。使用起來也很簡單,下面就很容易的實(shí)現(xiàn)了將數(shù)組轉(zhuǎn)為List。

Java技術(shù)編程分享,arrays的用法

當(dāng)然還有另一種使用方法:

Java技術(shù)編程分享,arrays的用法

其實(shí),個(gè)人感覺“數(shù)組轉(zhuǎn)List”這種說法是沒有意義的;我們都知道在List是一個(gè)接口,而真正實(shí)現(xiàn)了這個(gè)接口的類只有ArrayList,LinkedList,Vector。其中ArrayList和Vector內(nèi)部都是使用“動(dòng)態(tài)數(shù)組”實(shí)現(xiàn),LinkedList采用鏈表結(jié)構(gòu)實(shí)現(xiàn)。數(shù)據(jù)的物理結(jié)構(gòu)只用順序存儲接口和鏈?zhǔn)酱鎯Y(jié)構(gòu),List也不出其右。因此說這個(gè)方法實(shí)現(xiàn)了數(shù)組拷貝更確切一點(diǎn)。

下面,根據(jù)他的具體實(shí)現(xiàn),我們更能體會到拷貝的意義。

Java技術(shù)編程分享,arrays的用法

這里需要注意的是,asList內(nèi)部的ArrayList并不是我們常用的那個(gè)ArrayList,而是在Arrays類內(nèi)部的一個(gè)私有靜態(tài)類。從代碼可以看出,這個(gè)內(nèi)部的ArrayList,和常規(guī)的ArrayList相比,并沒有實(shí)現(xiàn)List接口,而是直接繼承了AbstractList。

以下所說的ArrayList統(tǒng)一指此處的靜態(tài)類

asList的實(shí)現(xiàn)很簡單,返回了一個(gè)ArrayList的實(shí)例,參數(shù)為所要拷貝的數(shù)組名。

可以看到asList()是接受一個(gè)泛型的變長參數(shù)的,而基本數(shù)據(jù)類型是無法被泛型化的。而對于泛型而言,基本數(shù)據(jù)類型,實(shí)際上會被人為是一個(gè)[x的類型。[表示這是一個(gè)數(shù)組,x為當(dāng)前數(shù)組的類型。

因此,這個(gè)方法不能直接“轉(zhuǎn)換”基礎(chǔ)數(shù)據(jù)類型的數(shù)組。

Java技術(shù)編程分享,arrays的用法

可以看到,正常情況下,ArrayList的構(gòu)造函數(shù)完成的工作就是一個(gè)賦值操作,把我們傳遞進(jìn)來的數(shù)組賦給a,而a就是一個(gè)數(shù)組。說白了,這就是一個(gè)數(shù)組拷貝的過程。再看ArrayList內(nèi)部實(shí)現(xiàn),get,set都是根據(jù)數(shù)組下標(biāo)實(shí)現(xiàn)簡單的數(shù)組賦值操作。這里省略了ArrayList內(nèi)部幾個(gè)方法,總之都是對數(shù)組的操作,有興趣的同學(xué),可以自行查看源碼。注意,這個(gè)類內(nèi)部,并沒有add方法的具體實(shí)現(xiàn),也就是說AbstractList內(nèi)部的add方法并沒有被覆蓋

AbstractList#add

Java技術(shù)編程分享,arrays的用法

因此,通過asList返回的List,一定不能進(jìn)行add操作,否則會拋出異常。

通過以上分析,我們可以得出以下結(jié)論:

asList不接受基本數(shù)據(jù)類型的數(shù)組名,作為參數(shù)直接傳遞。

asList通過backed(拷貝)的方式,返回的是一個(gè)固定長度的List,這點(diǎn)從方法注釋也可以看到

鑒于第二條,不能對這個(gè)返回的List執(zhí)行add方法,可以調(diào)用set方法。

同理不能調(diào)用remove方法,但可以調(diào)用get方法獲取元素。

這里關(guān)于第一個(gè)結(jié)論,還需要解釋一下,不接受基本數(shù)據(jù)類型的數(shù)組名作為參數(shù),但是以下實(shí)現(xiàn)是可以的。

Java技術(shù)編程分享,arrays的用法

好了,Arrays.asList的用法就說到這里了。既然都到這里了,順便多說一句,List轉(zhuǎn)數(shù)組的實(shí)現(xiàn),Collection接口定義了統(tǒng)一的方法toArray。對于不同的List實(shí)現(xiàn),統(tǒng)一調(diào)用即可。

Java技術(shù)編程分享,arrays的用法

排序

sort

sort()方法顧名思義,主要是實(shí)現(xiàn)數(shù)組的排序,默認(rèn)按升序進(jìn)行排列。

Arrays內(nèi)部關(guān)于sort的實(shí)現(xiàn),可以大體分為兩類,一類是基本數(shù)據(jù)類型的排序,一類是Object類型的排序。

基本數(shù)據(jù)類型的排序

Java技術(shù)編程分享,arrays的用法

sort靜態(tài)方法的實(shí)現(xiàn),按參數(shù)主要有兩種實(shí)現(xiàn)方法,一種是數(shù)組整體進(jìn)行排序;一種是在數(shù)組內(nèi)指定一段起始位置進(jìn)行排序,之后的對象數(shù)組排序也只是按指定起始位置排序,不再重復(fù)描述。其內(nèi)部具體實(shí)現(xiàn)是DualPivotQuicksort(雙軸快速排序)。

這里可以接收的參數(shù)類型除了int數(shù)組,還可以是long,short,char,byte,float,double類型數(shù)組。

Object類型數(shù)組排序

實(shí)現(xiàn)Comparable接口的對象數(shù)組排序

Java技術(shù)編程分享,arrays的用法

注意,使用這個(gè)方法時(shí),提供的“數(shù)組中的對象”必須是實(shí)現(xiàn)了Comparable接口的,也就是說必須告知明確告知,對數(shù)組中的對象是按什么規(guī)則排序。

實(shí)現(xiàn)Comparator接口的排序

Java技術(shù)編程分享,arrays的用法

使用這個(gè)方法是泛型為T的數(shù)組,需要提供一個(gè)實(shí)現(xiàn)了Comparator接口的實(shí)例,同理也是必須明確告知排序規(guī)則,如果同時(shí)實(shí)現(xiàn)了Comparable接口和Comparator接口,Comparator接口的實(shí)現(xiàn)將覆蓋Comparable接口的排序規(guī)則。

對象數(shù)組排序內(nèi)部實(shí)現(xiàn)采用了LegacyMergeSort(歸并排序)和TimSort排序。

parallelSort

parallelSort是Java8新增的排序方式,和sort方法不同的是,他采用多線程并行的方式進(jìn)行排序,當(dāng)數(shù)據(jù)規(guī)模較大時(shí)和sort相比有明顯優(yōu)勢.

Java技術(shù)編程分享,arrays的用法

parallelSort使用方式及可接受參數(shù)類型和sort方法基礎(chǔ)數(shù)據(jù)類型時(shí)的參數(shù)完全一致。

查找

Arrays內(nèi)部的查找,主要是binarySearch(二分查找法)。可以說,關(guān)于查找到實(shí)現(xiàn)分類和排序完全一樣。首先從數(shù)據(jù)類型上也是分為基礎(chǔ)數(shù)據(jù)類型構(gòu)成的數(shù)組和對象數(shù)組。都支持按特定范圍進(jìn)行排序;對于對象數(shù)組的排序,對象數(shù)組需要實(shí)現(xiàn)Comparable接口或者是提供Comparator接口的實(shí)例。

Java技術(shù)編程分享,arrays的用法

元素填充

Java技術(shù)編程分享,arrays的用法

fill()方法,使用很簡單,也很好理解,將數(shù)組用特定的元素val填滿即可,也可以是特定位置。

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“Java技術(shù)編程分享,arrays的用法”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产成人久久精品麻豆二区 | 国产免费不卡视频 | 成年女人黄小视频 | 四虎在线播放免费永久视频 | 九九伦理影院手机观看 | 五月花在线观看播放视频 | 九九视频这里只有精品 | 日本欧美一二三区色视频 | 天天干天天噜 | 国产亚洲男人的天堂在线观看 | 精品国产一区二区 | aa毛片免费全部播放完整 | 狠狠地射 | 2020国产精品视频免费 | 亚洲精品国产不卡在线观看 | 欧美成人免费xxx大片 | 高清毛片免费看 | 免费观看欧美成人禁片 | 热re久久精品国产99热 | 午夜私人影院在线观看 | 欧美久久久久欧美一区 | julia紧身裙中文字幕在线看 | 国产 麻豆 欧美亚洲综合久久 | 免费看欧美一级片 | 成人精品亚洲人成在线 | 精品一区二区日本高清 | 婷婷精品视频 | 一区二区三区四区在线视频 | 女人十八毛片一级毛片免费看 | 91九色国产 | 国产真实偷人视频在线播放 | 成人香蕉 | 牛牛影院免费永久地址 | 天天干天天操天天操 | 免费观看日本高清a毛片 | 成人在线不卡视频 | 成人午夜影院在线观看 | 一级片视频免费观看 | 激情国产视频 | 日韩欧美黄色 | 欧美另类videosbestv |