概念
所謂的數組(Array),就是數據的組合,簡單地說就是一個存儲容器,里面可以包含多個數據。該容器在內存中開辟了一塊連續的存儲空間,可以用來保存相同類型的多個數據。給大家舉個栗子,下圖的這個東西你見過嗎?
有的人說這不是雞蛋嗎?其實壹哥想讓你看的是存儲這些雞蛋的”容器“--雞蛋托!一個雞蛋托有多個存儲格子,每個格子只能存儲一個雞蛋,并且這些格子只能用來存儲雞蛋,不能存儲其他的東西。一個雞蛋托可以存儲的雞蛋數量是有限的,不能無限存儲。
其實Java里的數組就類似于是”雞蛋托“,數組中存儲的數據元素就是一個個的”雞蛋“。一個數組占據了內存中的一片連續空間,只能存儲相同類型的數據,數組有一定的存儲空間。我們在創建數組時,需要先聲明數組的類型,之后該數組中只能存儲指定類型的數據。
●我們把存儲在數組中的每一個數據,稱為”數據元素“。這些數據元素會按著一定的順序排列存儲,并賦予每個數據元素對應的編號。我們可以直接通過編號(索引、下標)的方式來調用指定位置上的數據元素,查找速度會很快。
●數組本身是引用類型,但數組中的數據元素可以是任何數據類型,包括基本數據類型和引用數據類型。
●數組創建時需要指定一個名稱,并會在內存中開辟一整塊連續的內存空間,數組名引用的就是這塊連續空間的首地址(第一個地址)。
●數組創建后,長度一旦確定,就不能再被修改。
java支持的數組
1.基本類型數組:包括 boolean、byte、short、char、int、long、float 和 double 類型的數組。
2.引用類型數組:包括任何類、接口、數組類型的對象的數組。
java不支持的數組
1.C/C++ 中的指針數組,因為 Java 中沒有指針。
2.多維變長數組,例如 C/C++ 中的動態二維數組。在 Java 中,多維數組的每個維度的大小必須在定義時確定,且在程序運行時無法改變。
3.超過 JVM 堆空間大小限制的大型數組。Java 數組的最大大小受 JVM 堆空間大小的限制。如果嘗試創建一個超過 JVM 堆空間大小限制的數組,則會引發 OutOfMemoryError 異常。
4.Java不支持泛型數組
java為什么不支持泛型數組
Java不支持泛型數組是由于以下兩個原因:
1.類型擦除
在Java中,泛型使用類型擦除來實現。在編譯時,所有泛型類型都會被替換為它們的限定類型或Object類型,因此在運行時無法獲得泛型類型的信息。這意味著在創建泛型數組時,編譯器無法確切知道數組元素的類型。例如,以下代碼無法編譯:
List[] arr = new List[10];
因為編譯器無法確定List在運行時的類型。
2.安全性
如果Java允許泛型數組,那么可能會導致類型安全問題。例如,假設以下代碼可以編譯:
List[] arr = new List[10];
Object[] objArr = arr;
objArr[0] = new ArrayList();
String s = arr[0].get(0); // ClassCastException
由于數組是協變的,因此我們可以將一個數組賦值給另一個數組,但是在這個例子中,我們把一個ArrayList賦值給一個List[],這樣就破壞了類型安全,因為我們可以在編譯時避免類型錯誤,但在運行時會拋出ClassCastException異常。
為了避免這些問題,Java禁止使用泛型數組。如果需要創建泛型容器,可以使用集合框架,例如List、Set和Map。