牛骨文教育服务平台(让学习变的简单)

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

就可以顺利编译运行了。