Java教程 8.1 數(shù)組 |
發(fā)布時(shí)間: 2012/8/17 17:29:52 |
對(duì)數(shù)組的大多數(shù)必要的介紹已在第4 章的最后一節(jié)進(jìn)行。通過(guò)那里的學(xué)習(xí),大家已知道自己該如何定義及初 討論它。然而,由于為這種大小的靈活性要付出較大的代價(jià),所以我們認(rèn)為矢量的效率并沒(méi)有數(shù)組高。 C++的矢量類知道自己容納的是什么類型的對(duì)象,但同Java 的數(shù)組相比,它卻有一個(gè)明顯的缺點(diǎn):C++矢量類 的operator[]不能進(jìn)行范圍檢查,所以很容易超出邊界(然而,它可以查詢vector 有多大,而且at()方法 確實(shí)能進(jìn)行范圍檢查)。在Java 中,無(wú)論使用的是數(shù)組還是集合,都會(huì)進(jìn)行范圍檢查——若超過(guò)邊界,就會(huì) 獲得一個(gè)RuntimeException(運(yùn)行期違例)錯(cuò)誤。正如大家在第9 章會(huì)學(xué)到的那樣,這類違例指出的是一個(gè) 程序員錯(cuò)誤,所以不需要在代碼中檢查它。在另一方面,由于C++的vector 不進(jìn)行范圍檢查,所以訪問(wèn)速度 較快——在Java 中,由于對(duì)數(shù)組和集合都要進(jìn)行范圍檢查,所以對(duì)性能有一定的影響。 本章還要學(xué)習(xí)另外幾種常見(jiàn)的集合類:Vector(矢量)、Stack(堆棧)以及Hashtable(散列表)。這些類 都涉及對(duì)對(duì)象的處理——好象它們沒(méi)有特定的類型。換言之,它們將其當(dāng)作Object 類型處理(Object 類型 是Java 中所有類的“根”類)。從某個(gè)角度看,這種處理方法是非常合理的:我們僅需構(gòu)建一個(gè)集合,然后 任何Java 對(duì)象都可以進(jìn)入那個(gè)集合(除基本數(shù)據(jù)類型外——可用Java 的基本類型封裝類將其作為常數(shù)置入 集合,或者將其封裝到自己的類內(nèi),作為可以變化的值使用)。這再一次反映了數(shù)組優(yōu)于常規(guī)集合:創(chuàng)建一 個(gè)數(shù)組時(shí),可令其容納一種特定的類型。這意味著可進(jìn)行編譯期類型檢查,預(yù)防自己設(shè)置了錯(cuò)誤的類型,或 者錯(cuò)誤指定了準(zhǔn)備提取的類型。當(dāng)然,在編譯期或者運(yùn)行期,Java 會(huì)防止我們將不當(dāng)?shù)南l(fā)給一個(gè)對(duì)象。 所以我們不必考慮自己的哪種做法更加危險(xiǎn),只要編譯器能及時(shí)地指出錯(cuò)誤,同時(shí)在運(yùn)行期間加快速度,目 的也就達(dá)到了。此外,用戶很少會(huì)對(duì)一次違例事件感到非常驚訝的。 考慮到執(zhí)行效率和類型檢查,應(yīng)盡可能地采用數(shù)組。然而,當(dāng)我們?cè)噲D解決一個(gè)更常規(guī)的問(wèn)題時(shí),數(shù)組的局 限也可能顯得非常明顯。在研究過(guò)數(shù)組以后,本章剩余的部分將把重點(diǎn)放到Java 提供的集合類身上。 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |