1.數(shù)組為什么特殊
數(shù)組與其他種類的容器的區(qū)別有三方面:效率、類型和保存基本類型的能力。
在Java中,數(shù)組是一種效率最高的存儲(chǔ)和隨機(jī)訪問(wèn)對(duì)象引用序列的函數(shù)茅逮。數(shù)組之所以優(yōu)于泛型之前的容器,就是因?yàn)槟憧梢詣?chuàng)建一個(gè)數(shù)組去持有某種具體類型判哥。這意味著你可以通過(guò)編譯器檢查献雅,來(lái)防止插入錯(cuò)誤類型和抽取不當(dāng)類型。數(shù)組可以持有基本類型塌计,而泛型之前的容器不能挺身。但是由于自動(dòng)包裝機(jī)制,容器看起來(lái)還能夠持有基本類型锌仅。數(shù)組碩果僅存的優(yōu)點(diǎn)就是效率章钾。然而,如果要解決更一般化的問(wèn)題热芹,那數(shù)組就可能會(huì)受到過(guò)多的限制贱傀,因此在這些情形下你還是會(huì)使用容器。
2.數(shù)組是第一級(jí)對(duì)象
無(wú)論使用哪種類型的數(shù)組伊脓,數(shù)組標(biāo)識(shí)符其實(shí)只是一個(gè)引用府寒,指向在堆中創(chuàng)建的一個(gè)真實(shí)對(duì)象,這個(gè)數(shù)組對(duì)象用以保存指向其他對(duì)象的引用。length
是數(shù)組對(duì)象唯一一個(gè)可以訪問(wèn)的字段或方法椰棘。[]
語(yǔ)法是訪問(wèn)數(shù)組對(duì)象的唯一方式纺棺。
3.返回一個(gè)數(shù)組對(duì)象
在Java中榄笙,你只是直接返回一個(gè)數(shù)組邪狞,而無(wú)需擔(dān)心要為數(shù)組負(fù)責(zé)——只要你需要它,它就會(huì)一直存在茅撞,當(dāng)你使用完后帆卓,垃圾回收器就會(huì)清理掉它。
4.多維數(shù)組
對(duì)于基本類型的多維數(shù)組米丘,可以通過(guò)使用花括號(hào)將每個(gè)向量分隔開剑令,每個(gè)花括號(hào)括起來(lái)的集合都會(huì)把你帶到下一級(jí)數(shù)組。Arrays.deepToString()
方法拄查,它可以將多維數(shù)組轉(zhuǎn)換為多個(gè) String
吁津。
int[][] a = {
{1,2,3},
{4,5,6},
}
System.out.println(Arrays.deepToString(a));
//Output:[[1,2,3],[4,5,6]]
5.數(shù)組與泛型
通常,數(shù)組與泛型不能很好地結(jié)合堕扶。不能實(shí)例化具有參數(shù)化類型的數(shù)組碍脏。
Peel<Banana>[] peels = new Peel<Banana>[10]; //illegal
但是,它允許創(chuàng)建對(duì)這種數(shù)組的引用稍算。
List<String>[] ls;
這條語(yǔ)句可以順利地通過(guò)編譯器而不報(bào)任何錯(cuò)誤典尾。而且,盡管你不能創(chuàng)建實(shí)際的持有泛型的數(shù)組對(duì)象糊探,但是你可以創(chuàng)建非泛型的數(shù)組钾埂,然后將其轉(zhuǎn)型。
6.創(chuàng)建測(cè)試數(shù)據(jù)
方便生成填充了測(cè)試數(shù)據(jù)的數(shù)組的工具科平。
6.1 Arrays.fill()
這個(gè)方法十分有限褥紫,只能用同一個(gè)值填充各個(gè)位置,而針對(duì)對(duì)象而言瞪慧,就是復(fù)制同一個(gè)引用進(jìn)行填充故源。或者填充數(shù)組的某個(gè)區(qū)域汞贸。
String[] a = new String[6];
Arrays.fill(a,"Hello")
print(Arrays.toString(a)); //[Hello,Hello,Hello,Hello,Hello,Hello]
Arrays.fill(a,3,5,"World")
print(Arrays.toString(a)); //[Hello,Hello,Hello,World,World,Hello]
6.2 數(shù)據(jù)生成器
CountingGenerator
類見書P443绳军。
6.3 從Generator中創(chuàng)建數(shù)組
7.Arrays使用功能
在 java.util
類庫(kù)中可以找到Arrays類。
-
equals()
:用于比較兩個(gè)數(shù)組是否相等矢腻; -
fill()
:填充數(shù)組门驾; -
binarySearch()
:用于在已經(jīng)拍好序的數(shù)組中查找元素; -
toString()
:產(chǎn)生數(shù)組的String表示多柑; -
hashCode()
:產(chǎn)生數(shù)組的散列碼奶是; -
Arrays.asList()
:接受任意的序列或數(shù)組作為其參數(shù),并轉(zhuǎn)變?yōu)長(zhǎng)ist容器。
7.1 復(fù)制數(shù)組
System.arrayCopy()
用它復(fù)制數(shù)組比f(wàn)or循環(huán)要快很多聂沙。其參數(shù)有:源數(shù)組秆麸,表示從源數(shù)組中的什么位置開始復(fù)制的偏移量,表示從目標(biāo)數(shù)組的什么位置開始復(fù)制的偏移量及汉,以及需要復(fù)制的元素個(gè)數(shù)沮趣。
7.2 數(shù)組的比較
Arrays類提供了重載后的equals方法,用來(lái)比較整個(gè)數(shù)組坷随。
7.3 數(shù)組元素的比較
Java有兩種方式來(lái)提供比較功能房铭。第一種是實(shí)現(xiàn)java.lang.Comparable
接口,使你的類具有天生的比較能力温眉。還可以創(chuàng)建一個(gè)實(shí)現(xiàn)了 Comparator
接口的單獨(dú)的類缸匪。
7.4 數(shù)組排序
使用內(nèi)置的排序方法,就可以對(duì)任意的基本類型數(shù)組排序类溢;也可以對(duì)任意的對(duì)象數(shù)組進(jìn)行排序凌蔬,只要該對(duì)象實(shí)現(xiàn)了 Comparable
接口或具有相關(guān)聯(lián)的 Comparator
。
7.5 在已排序的數(shù)組中查找
如果數(shù)組已經(jīng)排好序了闯冷,就可以使用 Arrays.binarySearch()
執(zhí)行快速查找砂心。
08/06/2019 :created