1. 程式人生 > >Java中的數組數據結構需要了解的要點

Java中的數組數據結構需要了解的要點

不執行 並且 打印 擴容 ofb 例如 更改 comparing nginx

. 首先,數組是Java中的對象。它們不是像int、short或long這樣的基本類,也不是具有很多方法的全功能對象,但由於它們是對象,所以它們隱式地擴展了Object,這就是為什麽可以使用數組引用(例如toString())調用java.lang.object的任何方法。

  1. Java中數組的另一個重要之處是,一旦創建,就不能更改數組的大小。好奇的開發人員可能會問,我們如何在Java中擁有像ArrayList這樣的動態集合,可以在飽和的時候調整自身大小?好吧,擴容不像你想得那樣,可以簡單地增加一個數組的大小來容納額外的元素。為了增加大小,必須創建一個新數組,並將內容從舊數組復制到新數組。盡管存在將元素從一個數組復制到另一個數組的快速方法,但它仍然是一個代價很大的操作,還會降低Java應用程序的性能。 這就是為什麽初始化具有適當大小的數組或集合仍然是最好的做法之一。

  2. 關於數組,第三件要知道的是它的長度屬性,它告訴你數組的大小或它可以容納多少元素。這通常也是造成混淆的原因,因為字符串有類似的length()方法,這是一個方法,而數組長度是屬性,所以不再有括號。另一個增加這種混淆的是arraylist的size()方法,它也返回arraylist可以容納多少元素。 下面是一個代碼片段示例,用於查找Java中數組的長度。

int[] arrayOfInts = new int[] { 101, 102, 103, 104, 105 };

System.out.println("length of arrayOfInts is : " + arrayOfInts.length); // print 5

在Java中循環遍歷數組時,可以使用數組的長度來避免訪問無效的索引,如下一個示例所示。

4.數組索引從零開始,因此第一個元素的索引為0,最後一個元素的索引為length -1。 此屬性用於叠代for循環中的所有元素。 String[] cities = new String[]{"London", "Paris", "NewYork", "HongKong", "Tokyo"};

<b>for</b>(<b>int</b> i=0; i<cities.length; i++){

String city = cities[i];
System.out.println(<font>"Current city is @ "</font><font> + city);
}
Output :
Current city is @ London
Current city is @ Paris
Current city is @ NewYork
Current city is @ HongKong
Current city is @ Tokyo
</font>
您可以看到,我們從0(第一個元素)開始循環,以小於長度的方式結束循環,例如length -1(最後一個元素索引)。如果嘗試訪問數組[長度],將獲得arrayIndexOutOfBoundsException,因為最後一個索引是length -1。

  1. 正如我之前所說的,Java虛擬機將數組視為對象。數組的類型是“[elementType”,其中element type是元素的類型。例如,一個(一維)整數數組的類型為“[I”,同樣,一維短數組的類型為“[S”,一維浮點數組的類型為“[F”。對於二維數組,可以得到兩個“[[”,例如,二維int數組的類型為“[[i”。當您在Java中打印數組時,可以檢查這一點。它打印其元素類型和哈希代碼,如下所示。

<b>public</b> <b>class</b> PrintArrayTypes{
<b>public</b> <b>static</b> <b>void</b> main(String args[]) {
<font><i>// type of one dimensional array in Java</i></font><font>
<b>int</b>[] arrayOfInts = <b>new</b> <b>int</b>[] { 101, 102, 103, 104, 105 };
System.out.println(arrayOfInts);
<b>short</b>[] arrayOfShorts = <b>new</b> <b>short</b>[] { 20, 30, 40, 50, 60 };
System.out.println(arrayOfShorts);
<b>float</b>[] arrayOfFloats = <b>new</b> <b>float</b>[] { 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
System.out.println(arrayOfFloats);
</font><font><i>// type of two dimensional array in Java</i></font><font>
<b>int</b>[][] arrayOfArrayOfInts = { { 1, 2, 3 }, { 10, 20, 30 },
{ 100, 200, 300 } };
System.out.println(arrayOfArrayOfInts);
<b>double</b>[][] arrayOfArrayOfDoubles = { { 2.0, 3.0 }, { 4.0, 5.0 } };System.out.println(arrayOfArrayOfDoubles);
}
}
Output
br/>System.out.println(arrayOfArrayOfDoubles);
}
}
Output
6.如果關註我的上一個示例,那麽您會註意到使用toString()打印數組不會產生除元素類型之外的任何有用的內容。 理想情況下,我們希望按照它們存在的順序查看數組的元素。 我們可以重寫array類的toString()方法嗎?不,這不是一個選項,但不要擔心我們有一個實用程序類java.util.Arrays,它包含幾種方法來處理不同類型的數組。 我們可以使用Arrays類的toString()和deepToString()方法在Java中打印一維和多維數組的數組元素,如下所示。

  1. 與toString()類似,數組的equals()方法也沒有用處。在大多數情況下,我們希望將數組的元素及其順序與另一個數組及其元素進行比較,但array的equals()方法不這樣做,而是引用比較,僅當兩個變量都指向同一個數組對象時才返回true,如下例所示。但是不用擔心,Arrays類用equals() 和deepEquals() 方法來比較Java中的一維數組和多維數組元素。您可以通過以下示例推斷出相同的理解:

<b>public</b> <b>class</b> ArrayEquality{
<b>public</b> <b>static</b> <b>void</b> main(String args[]) {
String[] cities = <b>new</b> String[]{<font>"London"</font><font>, </font><font>"Paris"</font><font>, </font><font>"NewYork"</font><font>, </font><font>"HongKong"</font><font>, </font><font>"Tokyo"</font><font>};
String[] metros = <b>new</b> String[]{</font><font>"London"</font><font>, </font><font>"Paris"</font><font>, </font><font>"NewYork"</font><font>, </font><font>"HongKong"</font><font>, </font><font>"Tokyo"</font><font>};
String[] capitals = cities;

</font><font><i>// comparing array using == operator</i></font><font>
System.out.println(</font><font>"cities == metros : "</font><font> + (cities == metros));
System.out.println(</font><font>"cities == capitals : "</font><font> + (cities == capitals));

</font><font><i>// comparing array using equals() method</i></font><font>
System.out.println(</font><font>"cities.equals(metros) : "</font><font> + cities.equals(metros));
System.out.println(</font><font>"cities.equals(capitals) : "</font><font> + cities.equals(capitals));

</font><font><i>// comparing array using Arrays.equals() method</i></font><font>
System.out.println(</font><font>"Arrays.equals(cities, metros) : "</font><font> + Arrays.equals(cities, metros));
System.out.println(</font><font>"Arrays.equals(cities, capitals) : "</font><font> + Arrays.equals(cities, capitals));

}
}
Output :
cities == metros : false
cities == capitals : <b>true</b>
cities.equals(metros) : false
cities.equals(capitals) : <b>true</b>
Arrays.equals(cities, metros) : <b>true</b>
Arrays.equals(cities, capitals) : <b>true</b>
</font>
您可以看到盡管元素及其順序相同,第一條語句是假的,因為“==”運算符僅在兩個變量都指向同一數組時才返回真,這是第二次相等性檢查的情況。同樣,equals()方法也模擬了==運算符的行為,因為數組不會重寫對象的equals()方法,其默認行為是基於相同的引用來決定相等性。 Arrays.equals()是檢查兩個數組在Java中是否相等的正確方法。為此,你應該一直使用它。

  1. Java程序員應該習慣使用deepEquals()方法來檢查兩個多維數組的相等性,因為Arrays.equals()方法不執行多維比較。 以下是檢查Java中多維數組相等性的示例:

<b>public</b> <b>class</b> MultiDimensionalArray{
<b>public</b> <b>static</b> <b>void</b> main(String args[]) {
<b>int</b>[][] a1 = { {2,4}, {4,6}, {8,10} };
<b>int</b>[][] a2 = { {12,14}, {14,16}, {18,20} };
<b>int</b>[][] a3 = { {2,4}, {4, 6}, {8,10} };

<font><i>// checking if two multi-dimensional array of same length but different element equal or not</i></font><font>
<b>boolean</b> result = Arrays.deepEquals(a1, a2);
System.out.println(</font><font>"Does two dimensional array a1 and a2 are equal : "</font><font> + result);

</font><font><i>// checking if two multi-dimensional array of same length, elements equal or not</i></font><font>
result = Arrays.deepEquals(a1, a3);
System.out.println(</font><font>"Does two dimensional array a1 and a3 are equal : "</font><font> + result);

}
}
Output :
Does two dimensional array a1 and a2 are equal : false
Does two dimensional array a1 and a3 are equal : <b>true</b>
</font>
9.使用java時,你需要多次在靜態數組與動態數組之間進行轉換。

  1. 在Java中有幾種初始化數組的方法。你也可以在不初始化的情況下創建它們,在這種情況下,所有存儲桶都將保持元素類型的默認值,例如,如果你創建一個空數組並且沒有初始化它,則所有存儲桶都將保持為零,因為這是Java中整數變量的默認值。 類似地,布爾數組默認使用false值初始化,String數組使用空值初始化。 如果您事先知道這些值,則可以在創建時初始化數組,如下所示:

<b>int</b>[] numbers = {1, 2, 3, 4, 5}; <font><i>// valid</i></font><font>
<b>int</b> multipleOfThree[] = {3, 6, 9, 12, 15}; </font><font><i>// valid </i></font><font>
<b>int</b>[] even = <b>new</b> <b>int</b>[]{2, 4, 6, 8, 10}; </font><font><i>// valid</i></font><font>
</font>

  1. 一個額外的提示是,array與arraylist有很大的不同,後者是一個動態數組,它可以根據需要調整自身的大小。另一方面,創建後不能更改數組的大小。除了這一事實之外,這兩個類之間還有幾個不同之處,例如ARAYLIST是Java集合框架的一部分,但數組不是。

這是關於Java中數組數據結構的一些要點的列表。使用數組來保存相同類型的元素,例如整數、字符串或對象,但不能混合它們,例如Java數組不能同時包含整數和字符串,在編譯時是錯誤的,但對於對象,如果編譯器允許,它將在運行時拋出arraystoreException。同樣,如果知道索引,數組也是用於訪問元素的快速數據結構之一

歡迎工作一到五年的Java工程師朋友們加入Java架構師:697558955

群內提供免費的Java架構學習資料(裏面有高可用、高並發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的

架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代

Java中的數組數據結構需要了解的要點