摘要:在編寫Java程序時,數組是常用的一種數據類型,然而在實際使用時有許多不便之處。為此,文章討論了代替Java傳統數組的動態數組的設計及實現過程,并舉例說明了動態數組類的使用方法。
關鍵詞:Java;動態數組;類;方法
O引言
熟悉Java編程的人員都知道,在創建Java數組時,必須用表達式指定其大小(如:int a[]=new int[3])或通過初始化(如:int a[]={1,2,31)隱式指定其大小,數組對象一旦創建,長度就不可改變。在實際使用這種數組時會有一些問題,如編譯器不檢查數組下標是否越界,在程序運行過程中不能改變數組的大小,不能進行數組拷貝、賦值等操作,給編程和調試帶來了諸多的不便。為此,作者利用Java自身的特點構造了一個可動態創建、操作較為齊全的動態數組類,以解決Java傳統數組的不足。
1構造一個動態數組類
1.1定義一個動態數組類DynamicArray
public class DynamicArray,/以下代碼在JDKl.4.2下調試通過
(pnvate Object elems口:
private Int length:
pubIic DynamicArray(){elems=1:Iength=O:}
pubJjc jnt getLength()
{if(elems==1)return 0:
else return length:
}
}
在DynamicArray類中,用elcms數組來存儲Object類型的對象元素,由于Java中object是其他所有類的超類,所以可以通過0bject類型的引用來指向子類的對象。字段lengm用來得到當前elcms中存儲元素的個數。無參數構造方法將elems初始化為1。
1、2在DynamicArray類中增加添加、刪除、獲取數組元素的方法
1.2.1添加數組元素的方法
pubIjc void appendEIem(Object elem)
{if(eIems==1){elems=new O bject[1];ems[O]=elem:)
//若數組為空則新創建一個數組
else//否則建立一個新數組比原數組長1,將原數組元素拷貝到
新數組并增加新元素
{Object temp~=new Object[length+1];
for(int i=0;i tem p[length]=eIem; elems=temp; } Iength++: } 1.2.2插入數組元素的方法 public void insertElem(O bject elem) {if(elems==1)(elems=new Object[1];elems[0]=elem:} //若數組為空則新創建一個數組 else//否則建立一個新數組比原數組長1,增加新元素并將原數 組元素拷貝到新數組 {Object tempN=new O bject[Iength+1]: ternp[0]=elem; for(int i=1;i elems=temp; } length++: } 1.2.3刪除指定下標元素的方法 pubIic boolean delElem(int index) {if(elems==1)return 1;//如果沒有數組元素 if(index>=O&index //如果下標沒有越界 {Object temp=new O bject[Iength-1]: for(int i=0:i for(int i=index+1;i elems=temp;length--; return true; } if(index==Olength==1){elems=1;length--;return true;) return flaIse: } 1.2.4讀取指定下標元素的方法 public Object getElem(Int index) {if(elems==1)return 1; else if(index>=Oindex else return nuIl: } 1.2.5清空數組的方法 public void clearAII() (elems=1;length=0:) 2使用動態數組類 (1)創建一個動態數組 DynamicArray aArray:=new DynamicArray(): (2)添加一個元素 aArray.append~em(new Integer(4)): (3)插入一個元素 aArray.insertElem(new Double(10.4)): (4)取得一個數組元素 Integer i=(Integer)aArray.getElem(1): 需要注意的是,在取得某一數組元素時,應當根據其類型進行強制類型轉換。 (5)刪除指定的元素 boolean bl=aArray.delElem(0); (6)清空數組 aArray.clearAIl()://清空后可以繼續增加新元素 3結束語 根據需求,還可以為動態數組類DynamicArray添加其它有意義的方法,如數組的排序、求最大數、求最小數等,那么,它將變成一個功能強大、使用靈活、方便于各種應用的數組類了。 在c#和Java中系統本身提供了一些列表類,其設計原理與本文思路相同,充分理解本文動態數組的原理對于提高Java類庫的認知具有重要意義。 筆者在多年從事Java教學和軟件開發工作中,深感Java普通數組的不足,從而開發了動態數組類DynamicArray,希望能給Java編程人員一些啟示。本文設計的動態數組已經在財務管理系統、閱卷系統等多個應用系統中使用,使用效果較好。 (注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。)