首先,數(shù)組是Java中的對象。它們不是像int、short或long這樣的基本類,也不是具有很多方法的全功能對象,但由于它們是對象,所以它們隱式地擴展了Object,這就是為什么可以使用數(shù)組引用(例如toString())調(diào)用java.lang.object的任何方法。
2.Java中數(shù)組的另一個重要之處是,一旦創(chuàng)建,就不能更改數(shù)組的大小。好奇的開發(fā)人員可能會問,我們?nèi)绾卧贘ava中擁有像ArrayList這樣的動態(tài)集合,可以在飽和的時候調(diào)整自身大小?好吧,擴容不像你想得那樣,可以簡單地增加一個數(shù)組的大小來容納額外的元素。為了增加大小,必須創(chuàng)建一個新數(shù)組,并將內(nèi)容從舊數(shù)組復(fù)制到新數(shù)組。盡管存在將元素從一個數(shù)組復(fù)制到另一個數(shù)組的快速方法,但它仍然是一個代價很大的操作,還會降低Java應(yīng)用程序的性能。這就是為什么初始化具有適當(dāng)大小的數(shù)組或集合仍然是最好的做法之一。
3.關(guān)于數(shù)組,第三件要知道的是它的長度屬性,它告訴你數(shù)組的大小或它可以容納多少元素。這通常也是造成混淆的原因,因為字符串有類似的length()方法,這是一個方法,而數(shù)組長度是屬性,所以不再有括號。另一個增加這種混淆的是arraylist的size()方法,它也返回arraylist可以容納多少元素。下面是一個代碼片段示例,用于查找Java中數(shù)組的長度。
int[]arrayOfInts=newint[]{101,102,103,104,105};
System.out.println("lengthofarrayOfIntsis:"+arrayOfInts.length);//print5
在Java中循環(huán)遍歷數(shù)組時,可以使用數(shù)組的長度來避免訪問無效的索引,如下一個示例所示。
4.數(shù)組索引從零開始,因此第一個元素的索引為0,最后一個元素的索引為length-1。此屬性用于迭代for循環(huán)中的所有元素。String[]cities=newString[]{"London","Paris","NewYork","HongKong","Tokyo"};
您可以看到,我們從0(第一個元素)開始循環(huán),以小于長度的方式結(jié)束循環(huán),例如length-1(最后一個元素索引)。如果嘗試訪問數(shù)組[長度],將獲得arrayIndexOutOfBoundsException,因為最后一個索引是length-1。
5.正如我之前所說的,Java虛擬機將數(shù)組視為對象。數(shù)組的類型是“[elementType”,其中elementtype是元素的類型。例如,一個(一維)整數(shù)數(shù)組的類型為“[I”,同樣,一維短數(shù)組的類型為“[S”,一維浮點數(shù)組的類型為“[F”。對于二維數(shù)組,可以得到兩個“[[”,例如,二維int數(shù)組的類型為“[[i”。當(dāng)您在Java中打印數(shù)組時,可以檢查這一點。它打印其元素類型和哈希代碼,如下所示。
6.如果關(guān)注我的上一個示例,那么您會注意到使用toString()打印數(shù)組不會產(chǎn)生除元素類型之外的任何有用的內(nèi)容。理想情況下,我們希望按照它們存在的順序查看數(shù)組的元素。我們可以重寫array類的toString()方法嗎?不,這不是一個選項,但不要擔(dān)心我們有一個實用程序類java.util.Arrays,它包含幾種方法來處理不同類型的數(shù)組。我們可以使用Arrays類的toString()和deepToString()方法在Java中打印一維和多維數(shù)組的數(shù)組元素,如下所示。
7.與toString()類似,數(shù)組的equals()方法也沒有用處。在大多數(shù)情況下,我們希望將數(shù)組的元素及其順序與另一個數(shù)組及其元素進行比較,但array的equals()方法不這樣做,而是引用比較,僅當(dāng)兩個變量都指向同一個數(shù)組對象時才返回true,如下例所示。但是不用擔(dān)心,Arrays類用equals()和deepEquals()方法來比較Java中的一維數(shù)組和多維數(shù)組元素。您可以通過以下示例推斷出相同的理解:
您可以看到盡管元素及其順序相同,第一條語句是假的,因為“==”運算符僅在兩個變量都指向同一數(shù)組時才返回真,這是第二次相等性檢查的情況。同樣,equals()方法也模擬了==運算符的行為,因為數(shù)組不會重寫對象的equals()方法,其默認行為是基于相同的引用來決定相等性。Arrays.equals()是檢查兩個數(shù)組在Java中是否相等的正確方法。為此,你應(yīng)該一直使用它。
8.Java程序員應(yīng)該習(xí)慣使用deepEquals()方法來檢查兩個多維數(shù)組的相等性,因為Arrays.equals()方法不執(zhí)行多維比較。以下是檢查Java中多維數(shù)組相等性的示例:
9.使用java時,你需要多次在靜態(tài)數(shù)組與動態(tài)數(shù)組之間進行轉(zhuǎn)換。
10.在Java中有幾種初始化數(shù)組的方法。你也可以在不初始化的情況下創(chuàng)建它們,在這種情況下,所有存儲桶都將保持元素類型的默認值,例如,如果你創(chuàng)建一個空數(shù)組并且沒有初始化它,則所有存儲桶都將保持為零,因為這是Java中整數(shù)變量的默認值。類似地,布爾數(shù)組默認使用false值初始化,String數(shù)組使用空值初始化。如果您事先知道這些值,則可以在創(chuàng)建時初始化數(shù)組,如下所示:
11.一個額外的提示是,array與arraylist有很大的不同,后者是一個動態(tài)數(shù)組,它可以根據(jù)需要調(diào)整自身的大小。另一方面,創(chuàng)建后不能更改數(shù)組的大小。除了這一事實之外,這兩個類之間還有幾個不同之處,例如ARAYLIST是Java集合框架的一部分,但數(shù)組不是。
這是關(guān)于Java中數(shù)組數(shù)據(jù)結(jié)構(gòu)的一些要點的列表。使用數(shù)組來保存相同類型的元素,例如整數(shù)、字符串或?qū)ο?,但不能混合它們,例如Java數(shù)組不能同時包含整數(shù)和字符串,在編譯時是錯誤的,但對于對象,如果編譯器允許,它將在運行時拋出arraystoreException。同樣,如果知道索引,數(shù)組也是用于訪問元素的快速數(shù)據(jù)結(jié)構(gòu)之一
以上就是長沙牛耳教育java培訓(xùn)機構(gòu)小編介紹的“Java中的數(shù)組數(shù)據(jù)結(jié)構(gòu)需要了解的要點”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關(guān)注長沙牛耳教育java培訓(xùn)機構(gòu)官網(wǎng),每天會有精彩內(nèi)容分享與你。