java基礎 ---數組

java基礎 ---數組

數組這種數據結構在任何程序中也是經常被使用的,它的優勢就在於速度快效率高。而稍顯不足的就是用數組寫出來的代碼比較繁瑣。當然使用數組來實現的算法可以增強程序的可讀性,更加便於理解。

在java中,一旦定義了數組的大小,那麼在整個程序的生命週期內這個數組的長度就被固定了,但是在程序中我們往往希望能夠動態的改變數組的長度,這樣也可以減少內存空間的浪費。那麼我們可以使用java標準內庫提供的對象集合類,如List,Set,Map等等,當然還可以再聲明一個數組重新定義他的長度,並將之前那個數組的引用指向新的數組。下面對常用的一維數組和二維數組的申明以及使用做個總結。

創建一個數組實質上是聲明一個指向該數組的引用,並且數組內的元素類型必須是一致的,因此我們可以利用多態的特性,聲明一個Object類型的數組,由於Object類是所有類的超類,那麼我們就可以在這個數組裏面放入任何的類型。並在需要時進行向下轉型,不過如果出現錯誤的類型轉換,那麼會拋出個ClassCastException異常。

一維數組:
我們可以通過下面三種方式來創建一個一維數組:
Object [] object = new Object[10];
Object [] object = {1,2,3,4};
Object [] object = new Object[]{1,2,3,4};
當然我們也可以把對象作爲數組元素,甚至是不同的對象
Object [] object = {new StringBuffer("j2se"),"j2ee",new Boolean(true)};
上面這句代碼我們就創建了3個不同的對象,StringBuffer對象,String 的對象,布爾型封裝類的對象。
這裏我創建該數組時就相當於指定了object這個數組的長度是3,如果使用時超過3的範圍就會拋出下標越界的異常。
我們可以使用數組的默認length屬性來檢測數組的長度,這裏的length屬性和String的length()方法有區別的。前者是java語言內置的屬性,並且只有數組才能使用這個屬性。而length()是String類的方法,用來檢測字符串長度的。

也可以建立一個隱式的二維數組。比如我們把上面數組中的元素替換一下
Object [] object = {new String[]{"jdk","jre","eclipse"},"j2ee",new Boolean(true)}
我們這時把剛纔一維數組中的第一個元素替換成了String類型的一維數組。這樣好像原來的一維數組變成了二維數組,其實並沒有,我們知道數組本身就是引用類型,他的每一個元素也都是引用類型,也就是說這裏的object[0]是一個指向任意類型的引用變量。他可以指向任何的對象甚至是任何的N維數組,那麼他指向的對象也會被向上轉型爲Object類型。但是object[0]這個引用變量本身不能是一個數組,如果要將他本身也變成個一維數組,我們可以創建一個二維數組。

二維數組
二維數組的創建和一維數組大致是相同的。比如:
Object [][] object = new Object[10][];
Object [][] object = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Object [][] object = new Object[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};

我們知道數組都是引用類型,這意味着裏面的任何元素都可以又是指向其他對象或者數組的引用,這個有點象C裏面的指針數組。理解了這點後,就能理解爲什麼在定義二維數組的時候可以不用指定第二維數組的長度了。即使指定了我們也可以通過改變引用的指向從而改變他的長度。比如:
Object [][] object = new Object[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};
object [0] = new Object[]{1,2};
System.out.println(object [0].length);
我們會發現本來這個二維數組的每個一維數組長度都是4,後面我們將第0個一維數組的指向改變了,將他指向一個新的一維數組,並且長度變成了2。現在我們的二維數組的一維數組長度分別是2,4,4。由此可見,通過改變引用的指向,就可以動態的改變數組的長度。

總結:數組的使用還是比較簡單的,定義了數組長度後,裏面的所有對象或者基本類型會被自動初始化,對象會被初始化爲null,int型會被初始化爲0等等。任何試圖通過賦值的方式改變數組大小都是不允許的。我們唯一可以做的是通過改變引用的指向來達到改變數組大小的目的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章