Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是List。下面介绍一下List作为Java动态数组的用法。
我们可以首先编写两个类List.java 和一个测试类Test1.java。将主类和测试类分开写,更有利于扩展性,这是一个非常好的编程思想。下面来看一下我们如何来实现List类。注释已经写得很清楚了,如果有不懂的地方欢迎留言。
//定义一个容器类
public class List{
final int INIT_LENGTH=10;
int[] array=new int[INIT_LENGTH];
int index=-1;
int add(int [] newArray){
int temp=index;
if(newArray==null){
System.out.println("数组不能为空");
return -1;
}
if(index+1+newArray.length>array.length){
int newlength=(index+1+newArray.length)*2;
expand(newlength);
}
System.arraycopy(newArray,0,array,index+1,newArray.length);
index=index+newArray.length;
return temp+1;
}
//方法的重载
void expand(int newlength){
//新创建一个数组,这个新数组的长度两倍大
int[] x=new int[newlength];
//复制array中的数据到x中
System.arraycopy(array,0,x,0,array.length);
array=x;
}
void expand(){
//新创建一个数组,这个新数组的长度两倍大
int[] x=new int[array.length*2];
//复制array中的数据到x中
System.arraycopy(array,0,x,0,array.length);
array=x;
}
//输出指定位置的元素
int remove(int i){
//判断i是否存在
if(i>=0&&i<index){
System.arraycopy(array,i+1,array,i,index-i);
index--;
}else{
System.out.println("集合中没有这个索引"+i);
return -1;
}
return -1;
}
//添加元素到指定位置
//value:要添加的值
//i:添加到数组的位置
//返回值:添加元素的索引
int add(int value,int i){
if(i<0||i>index+1){
System.out.println("索引越界"+i);
return -1;
}
if(index>=array.length-1){
expand();
}
index++;
System.arraycopy(array,i,array,i+1,index-i);
array[i]=value;
return i;
}
//清空
void clear(){
array=new int[INIT_LENGTH];
index=-1;
}
//求出容器的真实大小
int size(){
return index+1;
}
void add(int value){
if( index>=array.length-1){
expand();
}
index++;
array[index]=value;
}
int[] getArray(){
//新创建一个数组
int[] result=new int[index+1];
System.arraycopy(array,0,result,0,index+1);
return result;
}
}
接下来,我们把测试类写好。
public class Test1{
public static void main(String[] args){
List list=new List();
int[] r=list.getArray();
for(int t:r){
System.out.println(t);
}
//开始存元素
list.add(1);
list.add(2);
r=list.getArray();
for(int t:r){
System.out.println(t);
}
System.out.println("list容器中有"+list.size());
for(int i=0;i<10;i++){
list.add(i);
}
//存完后
r=list.getArray();
for(int t:r){
System.out.println(t);
}
System.out.println("list容器中有"+list.size());
System.out.println("清空===================");
list.clear();
System.out.println("清空后,list容器中有"+list.size());
System.out.println("移除===================");
for(int i=0;i<10;i++){
list.add(i);
}
list.remove(3);
r=list.getArray();
for(int t:r){
System.out.println(t);
}
System.out.println("在指定位置添加元素");
list.add(888,1000);
r=list.getArray();
}
}
然后呢,我们使用javac Test1.java
java Test1
就可以顺利编译运行了。