項目開發中,若是須要存儲大量的數據,例如若是須要讀取100個數,那麼就須要定義100個變量,顯然重複寫100次代碼,是沒有太大意義的。Java語言提供了數組(array)的數據結構,能夠解決這個問題。數組
數組的概念
一個數組是相同數據類型的元素按必定順序排列的集合。使用數組能夠將同一類型的數據存儲在連續的內存位置。數組中各元素的類型相同,經過下標的方式來訪問數組中的元素,下標從0開始。微信
由此得出,數組具備如下基本特色:數據結構
數組的長度是肯定的,數組一旦被建立,它的大小就是不能夠改變的。架構
數組的元素必須是相同類型,不能出現混合類型。app
數組類型能夠是任意數據類型,包括基本數據類型和引用類型。spa
數組在使用以前必須先聲明,也就是要先定義後使用。一維數組的定義格式爲:.net
數據類型[] 數組名;3d
數據類型 數組名[];orm
這兩種聲明方式徹底等價,不過在實際開發中,咱們通常推薦使用第一種方式。對象
數組的初始化
數組聲明以後,僅僅是定義了一個數組引用,系統並無爲數組分配任何內存,所以如今還不能訪問它的任何元素。必須通過數組初始化後,才能使用數組的元素。
數組的初始化分爲靜態初始化和動態初始化兩種。
靜態初始化就是在定義數組的同時給數組元素賦值。靜態初始化使用一對大括號將初值括起來,大括號中元素的個數就是數組的長度。
格式:數據類型[] 數組名 = new 數據類型[]{元素1,元素2,…};
例如:int[] arr = new int[]{1,2,3,4};
動態初始化就是在定義數組時,只指定數組的長度,不爲它賦值。在使用到的時候在給它添加元素。
格式:數據類型[] 數組名 = new 數據類型[數組長度];
例如:
int[] arr = new int[4]; arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4 |
數組內存圖解
首先咱們要先了解Java中堆和棧的概念。咱們能夠這樣理解:
咱們定義的局部變量都存儲在棧中;而堆中存放的都是數組和對象(其實數組也是對象)。凡是new創建的都是在堆中,堆中存放的都是實體(對象),實體能夠有多個屬性,若是一個數據消失,這個實體沒有消失,還能夠用,因此堆是不會釋放的;可是棧不同,棧裏存放的都是單個變量,變量被釋放了,那就沒有了。
下面,咱們經過對一個數組的聲明和初始化的例子來看內存的分配狀況。
1.聲明一個數組
int[] s = null; |
這時,只是聲明瞭一個數組變量,這個變量存儲在棧中,堆內存中是不會發生變化的:
2.給數組分配空間
s = new int[10]; |
當給數組分配空間之後,纔會在堆內存中給數組真的分配空間,而且變量 s 會指向數組在堆內存中的地址:
3.給數組元素賦值
for(int i = 0;i < 10; i++) { s[i] = i + 1; } |
遍歷數組
遍歷數組有兩種方式:
普通 for 循環
for(int i = 數組第一個元素的下標; i < 數組名.length; i++){ System.out.println(數組名[i]); // 輸出下標爲 i 的元素值 } |
數組中的元素個數 length 是數組類中惟一的數據成員變量,使用 new 建立數組時系統自動給 length 賦值。數組一旦建立完畢,其大小就固定下來了。
加強 for 循環(JDK 1.5以後可用)
for(數組中元素的數據類型 變量名 :數組名){ System.out.println(變量名); // 輸出元素值 } |
多維數組
數組元素能夠聲明爲任何類型,當數組的類型是一個一維數組類型時,這樣能夠創建數組的數組,即二維數組。同理,能夠獲得多維數組。通常來說,n 維數組是 n-1 維數組的數組。聲明多維數組時使用類型及多對方括號。以二維數組爲例,定義格式以下:
類型[][] 數組名;
也可使用以下兩種方式聲明一個二維數組:
類型[] 數組名[];
類型 數組名[][];
推薦使用第一種。例如:int[][] arr; 就表示一個二維數組。
多維數組的初始化
與一維數組同樣,多維數組的初始化也分爲靜態和動態兩種。
靜態初始化時,在定義數組的同時爲數組元素賦值。例如,二維數組 arr 的初始化以下:
int[][] arr = {{1,2}, {2,6}, {7,9}};
這裏,沒必要指出數組每一維的大小,系統會根據初始化時給出的初值的個數自動計算數組每一維的大小。外層括號所包含各元素是數組第一維的各元素,內層括號對應於數組第二維的元素。
對二維數組進行動態初始化時,有兩種分配內存空間的方法:直接分配與按維分配。
直接分配就是直接爲每一維分配空間,聲明數組時,給出各維的大小。以二維數組爲例,定義格式以下:
類型[][] 數組名 = new 類型[第一維數組的長度][第二維數組的長度];
例如:
int[][] arr = new int[2][3]; |
聲明瞭一個2行3列的二維數組。
按維分配是從最高維起,分別爲每一維分配內存。
建立二維數組的通常格式爲:
類型[][] 數組名 = new 類型[第一維數組的長度][]; 數組名[0] = new 類型[第二維數組的長度]; 數組名[1] = new 類型[第二維數組的長度]; …… |
若是建立數組時第二維大小是同樣的,則建立的是一個矩陣數組。
多維數組的訪問
在定義並初始化多維數組後,可使用多維數組中的每一個元素。仍以二維數組爲例,訪問方式爲:
數組名[第一維下標][第二維下標];
數組下標都是從 0 開始,第一維也稱爲行,第二維也稱爲列。
二維數組也有length屬性,但它只表示第一維數組的長度。例如:
int[][] a = new int[3][4]; |
a.length 的值就是 3,a[0].length 的值就是 4。
緣由以下:
點個關注吧,我會持續更新更多幹貨~~
本文分享自微信公衆號 - Java架構成長之路(K469785635)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。