黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java技術編程分享,arrays的用法

Java技術編程分享,arrays的用法

更新時間:2020-06-02 16:32:51 來源:動力節點 瀏覽2328次

Arrays

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

數組轉List

排序

查找

元素填充

Arrays數組操作集

數組轉List---asList

Java技術編程分享,arrays的用法

這個被“普遍”稱為數組轉List的方法,可能是Arrays內大家使用頻率最高的一個靜態方法了。使用起來也很簡單,下面就很容易的實現了將數組轉為List。

Java技術編程分享,arrays的用法

當然還有另一種使用方法:

Java技術編程分享,arrays的用法

其實,個人感覺“數組轉List”這種說法是沒有意義的;我們都知道在List是一個接口,而真正實現了這個接口的類只有ArrayList,LinkedList,Vector。其中ArrayList和Vector內部都是使用“動態數組”實現,LinkedList采用鏈表結構實現。數據的物理結構只用順序存儲接口和鏈式存儲結構,List也不出其右。因此說這個方法實現了數組拷貝更確切一點。

下面,根據他的具體實現,我們更能體會到拷貝的意義。

Java技術編程分享,arrays的用法

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

以下所說的ArrayList統一指此處的靜態類

asList的實現很簡單,返回了一個ArrayList的實例,參數為所要拷貝的數組名。

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

因此,這個方法不能直接“轉換”基礎數據類型的數組。

Java技術編程分享,arrays的用法

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

AbstractList#add

Java技術編程分享,arrays的用法

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

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

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

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

鑒于第二條,不能對這個返回的List執行add方法,可以調用set方法。

同理不能調用remove方法,但可以調用get方法獲取元素。

這里關于第一個結論,還需要解釋一下,不接受基本數據類型的數組名作為參數,但是以下實現是可以的。

Java技術編程分享,arrays的用法

好了,Arrays.asList的用法就說到這里了。既然都到這里了,順便多說一句,List轉數組的實現,Collection接口定義了統一的方法toArray。對于不同的List實現,統一調用即可。

Java技術編程分享,arrays的用法

排序

sort

sort()方法顧名思義,主要是實現數組的排序,默認按升序進行排列。

Arrays內部關于sort的實現,可以大體分為兩類,一類是基本數據類型的排序,一類是Object類型的排序。

基本數據類型的排序

Java技術編程分享,arrays的用法

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

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

Object類型數組排序

實現Comparable接口的對象數組排序

Java技術編程分享,arrays的用法

注意,使用這個方法時,提供的“數組中的對象”必須是實現了Comparable接口的,也就是說必須告知明確告知,對數組中的對象是按什么規則排序。

實現Comparator接口的排序

Java技術編程分享,arrays的用法

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

對象數組排序內部實現采用了LegacyMergeSort(歸并排序)和TimSort排序。

parallelSort

parallelSort是Java8新增的排序方式,和sort方法不同的是,他采用多線程并行的方式進行排序,當數據規模較大時和sort相比有明顯優勢.

Java技術編程分享,arrays的用法

parallelSort使用方式及可接受參數類型和sort方法基礎數據類型時的參數完全一致。

查找

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

Java技術編程分享,arrays的用法

元素填充

Java技術編程分享,arrays的用法

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

以上就是動力節點java培訓機構的小編針對“Java技術編程分享,arrays的用法”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 91国内外精品自在线播放 | 日韩亚洲欧美在线观看 | 成年免费大片黄在看 | 国产欧美日韩另类va在线 | 99精品视频在线观看re | 国产特黄一级毛片特黄 | 91短视频版在线观看免费大全 | 久久99毛片免费观看不卡 | 在线免费看黄 | 日韩久草视频 | 亚洲国产精品一区二区久 | 狠狠骚 | 114级毛片免费观看 1204国产成人精品视频 | 国产专区青青草原亚洲 | 二区久久国产乱子伦免费精品 | 黄色国产免费观看 | 天天舔天天干天天操 | 天天槽夜夜槽槽不停 | 国产午夜一级鲁丝片 | 亚洲精品第一页 | 久久精品a一国产成人免费网站 | 白丝袜网站 | 亚洲综合一二三区 | 91麻豆传传媒波多野衣久久看 | 色偷偷综合网 | 日韩午夜高清福利片在线观看 | 亚洲国产成人久久77 | 免费观看性欧美大片无片纯爱 | 亚洲国产成人精品激情 | 亚洲国产精品毛片∧v卡在线 | 亚洲另类精品xxxx人妖 | 成 人在线观看视频网站 | 久久成人激情视频 | 国产成人综合在线观看 | 一级毛片视频在线观看 | 国产乱人视频在线播放不卡 | 成人激情综合网 | 亚洲乱码一二三四区国产 | 日韩欧美视频在线一区二区 | 九九久久亚洲综合久久久 | 欧美 日韩 中文字幕 |