自定义数组是为了克服传统数组的缺点,更好地方便程序员编程,由程序员自己编写的数组。
一. 在此之前先说说JAVA中数组的缺点如下:
1.数组中元素类型统一,不能改变。
2.数组的长度固定,不能改变。
3.数组不便于插入,删除元素。
二.自定义数组就是要吸取JAVA中数组的优点,克服其缺点。
1.首先我们来克服第一个缺点-----数组中元素类型统一。
我们知道基本数据类型在JAVA中都有其包转类。我们要在一个数组中存入各种数据类型的话,我们可以考虑把数组类型定义为它们的超类Object类型;
private Object[] src=new Object[3];
这就定义了一个Object类型长度为3的数组,其可以存入各种类型的元素(如:字符串,对象,整型等等)
2.我们在来克服第二个缺点------长度固定。
当一个数组Array1长度固定后,我们要改变其长度的话就要重新定义一个数组Array2,将Array2的长度定长些,再把Array1的元素复制到Array2.然后将Array2赋值给Array1(Array1=Array2),这样Array1就指向Array2数组的起始地址,这样Array1的长度就变长为Array2的长度。
如下定义一个函数可以根据需要动态地改变数组长度:
public class List {
private Object[] src=new Object[0];
//在末尾增加元素
public void add(Object obj){
//定义新数组,长度加1
Object[] dest = new Object[src.length+1];
//拷贝
for(int i=0;i<src.length;i++){
dest[i] = src[i];
}
//交换数组
src = dest;
}
3.最后我们来解决第三个缺点-----数组的定位插入,删除元素
跟上例相似,我们只要将指定位置t之前的值赋给dest[i],再在t位置加入要添加的数,再将之后的数一一复制就行。删除就是就指位置的值覆盖就行
如下定位插入例子:
//在指定位置添加元素
public void add2(Object object, int t){ //在指定位置添加
Object[]dest=new Object[src.length+1];
for(int i=0;i<t;i++)
{ dest[i]=src[i];
}
dest[t]=object;
for(int i=t+1;i<src.length;i++)
{ dest[i]=src[i];
}
src=dest;
}