陣列- Java備忘筆記 - GitBook

文章推薦指數: 80 %
投票人數:10人

陣列是一種由相同型態的資料組成的資料結構。

· 陣列在記憶體中使用連續的記憶體空間,透過索引值(index)來做資料的存取。

· 陣列在Java裡是以物件(object)的方式存在,所以 ... JJJava備忘筆記Search…JJJava備忘筆記IntroductionJava特性如何開始編譯並執行console編譯並執行Eclipse作者介紹BasicObject-OrientedBasicJavaProgramming第一支Java程式變數資料型態基本資料型態參考資料型態基本與參考資料型態差異陣列字串運算子表達式、敘述、程式區塊流程控制靜態成員static內部類別套件、載入存取修飾子標準輸入ScannerObjectOrientedProgrammingPoweredByGitBook陣列介紹Java如何宣告、使用陣列,以及記憶體中的配置。

什麼是陣列?WhatisArray?陣列是一種由相同型態的資料組成的資料結構。

陣列在記憶體中使用連續的記憶體空間,透過索引值(index)來做資料的存取。

陣列在Java裡是以物件(object)的方式存在,所以陣列本身是參考資料型態(referencetype)。

陣列中的元素可以是基本資料型態(primitivetype)也可以是參考資料型態(referencetype)。

陣列的創建ArrayCreation陣列就跟一般的物件一樣,需要透過關鍵字new來創造實體,new後面要有:1.元素的資料型態2.元素個數陣列被初始化後,每個元素都會被初始化為該型態的初始值(defaultvalue)。

假設我們需要一個大小為3的int陣列,範例程式:int[]array;//宣告array=newint[3];//創建大小為3的int陣列,回傳reference給array當然也可以寫成一行,這是等價的:int[]array=newint[3];記憶體配置:存取元素AccessElements透過陣列名稱,利用中括號『[]』,括號裡面放元素在陣列中的索引值(index)。

陣列索引值從0開始,只能為非負整數。

以上圖為例:int[]array=newint[3];array[0]=1;array[1]=10;array[2]=100;System.out.println(array[0]);System.out.println(array[1]);System.out.println(array[2]);執行結果:110100初始化時給值ArrayInitializer陣列可以同時宣告及指定其值,利用大括號『{}』,搭配逗號『,』隔開各元素。

int[]array={1,10,100};編譯器會看大括號理的元素個數及元素值去創造相符的物件,回傳reference給變數array。

這行的效果跟下面相同:int[]array;array=newint[3];array[0]=1;array[1]=10;array[2]=100;這種寫法適用於在寫程式的時候已經確定該陣列的元素個數、內容。

多維陣列Multi-DimensionalArray上面已經討論過一維陣列的宣告及使用,但實務上我們遭遇很多問題並不是單靠一維陣列就可以簡單解決的,因此我們希望可以有一個多維度的陣列來幫我們做處理。

假設我們需要一個大小為2*3二維的int陣列,範例如下:int[][]matrix;//宣告matrix=newint[2][3];//創件空間,回傳reference給matrixint[][]是matrix的型態,代表是int的二為陣列,要幾個維度就用幾個『[]』。

newint[2][3],創造『大小為2個陣列』,其元素內容為『大小為3的int陣列』。

記憶體配置:有沒有發現到,Java根本沒有所謂的多維陣列!它只是不斷的在一維陣列中塞另一個陣列!一個m*n的二維陣列,就是m個『大小為n的陣列』,更多維度一樣的概念以此類推,這裡只舉二維為例。

(不然實在不好畫)初始化的方法跟一維陣列相同,可以直接寫成程式碼:int[][]matrix={{1,2,3},{5,6,7}};大括號夾起來的就是一個陣列,彼此用逗號『,』隔開,形成陣列中有陣列的樣子。

上述程式效果同於:int[][]matrix;//宣告matrix為int[][]型態。

matrix=newint[2][];//matrix是『2個int[]的陣列』的陣列matrix[0]=newint[3];//matrix[0]是一個大小為3的int陣列matrix[1]=newint[3];//matrix[1]是一個大小為3的int陣列matrix[0][0]=1;//以下幾行利用中括號及索引值設定陣列元素的值matrix[0][1]=2;matrix[0][2]=3;matrix[1][0]=5;matrix[1][1]=6;matrix[1][2]=7;也因為Java的陣列是這種特性,所以我們也可以創造出『長度不同』的多維陣列。

假設要創造出的陣列長這樣:對Java來說,由於陣列在記憶體中都是一維的,不同長度只是指向不同的物件,所以可以輕鬆的初始化。

利用Initializer:int[][]array={{10,20},{100},{5,6,7}};這樣就可以達成要求了!要一步一步寫的話像這樣:int[][]array;array=newint[3][];array[0]=newint[2];array[1]=newint[1];array[2]=newint[3];array[0][0]=10;array[0][1]=20;array[1][0]=100;array[2][0]=5;array[2][1]=6;array[2][2]=7;參考型態陣列ReferenceTypeArray前面舉的例子是int陣列,而我們知道int是基本資料型態,那如果要創件的是參考資料型態的陣列呢?恩,就跟創造多維陣列一樣,層層的初始化每個物件。

假設我要創造大小為3的Human陣列:(Human為自訂類別)Human[]array;//宣告array為Human一維陣列array=newHuman[3];//創造大小為3的陣列用來存放Human,回傳reference給arrayarray[0]=newHuman();//array[0]是物件,必須要初始化才能在記憶體中存在。

array[1]=newHuman();//如果沒有對物件做初始化,預設值為null。

array[2]=newHuman();//存取null的成員會產生NullPointerException例外。

以上程式可以搭配迴圈使用,是一般常見的做法:Human[]array=newHuman[3];for(inti=0;i<3;i++)array[i]=newHuman();記憶體配置:一個最大觀念是,Java的陣列是物件,且都是為一維的陣列。

內容可以放值(value)或參考(reference),因此可以陣列的內容是另一個陣列,創造出多維陣列的感覺。

記憶體的配置圖在陣列的觀念裡面很重要,一定要懂為什麼。

如果有什麼不清楚的麻煩讓我知道,或許是文字或圖片沒弄好產生誤解或混淆。

陣列長度lengthofArray陣列被創造出來,元素個數就決定好了,很多時候我們需要陣列的大小(length)方便我們做運算、處理,那要如何取得呢?恩,陣列是一個物件,它有一個資料成員用來紀錄它的大小,就叫做length。

int[]array={1,1,2,3,5,8,13};System.out.println(array.length);執行結果:7利用陣列名稱.length可以輕鬆取得該陣列的長度,搭配迴圈可以方便的走訪整個陣列:int[]array={1,1,2,3,5,8,13};intsum=0;for(inti=0;i



請為這篇文章評分?