实现一个可以动态扩容删除元素的容器类,MutableArray

void arraycopy(Object src, int srcPos, Object dst, int dstPos, int length)

是一个数组,方法的作用是:将一个数组中的元素,从指定位开始,拷贝到另外一个数组中的指定位置,拷贝length个
-src: 原数组
-srcPos: 原数组中,需要拷贝的元素起始下标
-dst: 目标数组
-dstPos: 目标数组中,需要粘贴的元素的起始下标
-length: 拷贝的元素的数量

T[] copyOf(T[] src, int newLenth);

-src:源数组
-newLenth:新长度

public class Test {
    public static void main(String[] args) {
        MutableArray mutableArray=new MutableArray();
        mutableArray.add("lily");
        mutableArray.add("lucy");
        mutableArray.add("poly");
        System.out.println(mutableArray);
        System.out.println("===================");

        mutableArray.set(1,"tom");
        System.out.println(mutableArray);
        System.out.println("===================");

        mutableArray.remove("tom");
        System.out.println(mutableArray);
        System.out.println("===================");

        mutableArray.remove(1);
        System.out.println(mutableArray);
        System.out.println("===================");
    }
}

class MutableArray {
    private String [] arr;
    public MutableArray() {
        this.arr=new String[0];
    }
    public void add(String s){
        //String []str=new String[arr.length+1];
        //每次只扩一位,可以尝试将这个位数扩大
        String []str=Arrays.copyOf(this.arr,arr.length+1);
        str[str.length-1]=s;
        this.arr=str;
    }
    public void set(int index,String s){
        arr[index]=s;
    }
    public void remove(String s){
        int index;
        for(int i=0;i<arr.length;i++){
            if(arr[i]==s){
                index=i;
            //使用index后面的元素覆盖index到数组长度减一位元素,最后的结果将会出现倒数第一和倒数第二位的元素相同
            //因此再使用copyof重新拷贝数组并重新将arr指向拷贝后的数组
                System.arraycopy(arr,index+1,arr,index,arr.length-index-1);
                arr=Arrays.copyOf(arr,arr.length-1);
                break;
            }
        }
    }
    public void remove(int index){
        if(index>arr.length||index<0){
            System.out.println("下标不正常");
            return ;
        }
        //使用index后面的元素覆盖index到数组长度减一位元素,最后的结果将会出现倒数第一和倒数第二位的元素相同
        //因此再使用copyof重新拷贝数组并重新将arr指向拷贝后的数组
        System.arraycopy(arr,index+1,arr,index,arr.length-index-1);
        arr=Arrays.copyOf(arr,arr.length-1);
    }
    public void clear(){
        arr=null;
    }
    @Override
    public String toString() {
        return
                "arr=" + Arrays.toString(arr);
    }
}

猜你喜欢

转载自www.cnblogs.com/dch-21/p/12726484.html