Java -自定義陣列
陣列存放相同資料型別資料且大小在初始化已被固定,因此使用靈活性被減小,對此在Java 出現了Arraylist 動態陣列,其容量大小靈活擴充套件。此文將實現類似的動態陣列,進行基本的增刪改查操作。為了適應各種資料型別的陣列操作,在此引入泛型。泛型簡單的意思就是泛指的型別(引數化型別)。想象下這樣的場景:如果我們現在要寫一個容器類(支援資料增刪查詢的),我們寫了支援String型別的,後面還需要寫支援Integer型別的。然後呢?Doubel、Float、各種自定義型別?這樣重複程式碼太多了,而且這些容器的演算法都是一致的。我們可以通過泛指一種型別E,來代替我們之前需要的所有型別,把我們需要的型別作為引數傳遞到容器裡面,這樣我們演算法只需要寫一套就可以適應所有的型別。最典型的的例子就是ArrayList了,這個集合我們無論傳遞什麼資料型別,它都能很好的工作。
首先進行泛型類及其類屬性和構造方法的定義
public class CreateArray<E>
{
private Object[]obj=new Object[0]; //向上轉型Object類 Object類是所有類的父類適應於各種資料型別
public Object[] getObj()
{
return obj;
}
}
下面進行動態陣列新增的方法定義,新建一個新陣列將原陣列逐一對應複製到新陣列內,新陣列最後一個元素將被插入新元素,最後重新指向新陣列 類似於C語言的指標,程式碼如下:
public void add(E e) //增加資料
{
Object []objnew=new Object[obj.length+1];
objnew[objnew.length-1]=e;
for(int i=0;i<objnew.length-1;i++)
{
objnew[i]=obj[i];
}
obj=objnew;
}
實現查詢功能就是遍歷比較元素是否相同,最後並將結果返回,程式碼如下:
public int find(E e) //查詢資料
{
int index= 0;
for(int i=0;i<obj.length;i++)
{
if(e.equals(obj[i]))
{
index=i;
}
}
return index;
}
接下來定義刪除功能,先用查詢方法找到刪除元素的位置,接下來遇到該位置就跳過,程式碼如下:
public void remove(E e) //刪除資料
{
int index=find(e);
Object [] objNew=new Object[obj.length-1];
int i=0;
int j=0;
while(j<=objNew.length-1)
{
if(i==index)
{
i++;
}
objNew[j++]=obj[i++];
}
obj=objNew;
}
修改的功能就比較簡單了,用查詢方法先把修改元素找到,然後對應替換成新的元素,程式碼如下:
public void Update(E e1,E e2) //修改資料
{
int index=find(e1);
for(int i=0;i<obj.length;i++)
{
if(index==i)
{
obj[i]=e2;
}
}
}
接下來進行自由發揮,比如獲取指定索引的元素並返回該元素,程式碼如下:
public Object get(int index) //獲取指定索引的元素
{
Object oop=null;
for(int i=0;i<obj.length;i++)
{
if(index==i)
{
oop=obj[i];
break;
}
}
return oop;
}
最後我們可以列印輸出一下動態陣列,如果要用 System.out.println() 方法直接輸出,需重寫toString()方法,否則打印出來的地址,程式碼如下:
@Override
public String toString() //重寫toString方法
{
return Arrays.toString(obj);
}
public void printArray() //列印動態陣列
{
for (int i=0;i<this.obj.length;i++)
{
System.out.println(obj[i]);
}
}
到此所有定義已完畢,通過測試各項功能正常,歡迎大家交流討論!