手工实现一个Arraylist类

public class xjhArrayList <E>{
    private Object[] elementData;//定义一个数组,底层
    private int size=0;//表示目前容器内元素的个数
    private static final int DEFAULT_SIZE=10;//数组默认大小

    public  xjhArrayList(){//无参构造
        elementData=new Object[DEFAULT_SIZE];
    }

    public  xjhArrayList(int capacity ){//有参构造,自定义初始数组大小
        if(capacity<0){throw new RuntimeException("容器大小不能为负数");}
            else{
        elementData=new Object[capacity];
        }
    }

    public void add(E e){
        if(size==elementData.length){//当添加的元素个数超过原始数组大小时进行扩容操作
         Object[] newArray=new Object[elementData.length<<1];//左移一位,新数组比旧数组大一倍
        System.arraycopy(elementData,0,newArray,0,elementData.length);
        //调用系统数组拷贝函数,完成新数组对老数组的拷
            elementData=newArray;//替换老数组,原对象被系统回收
        }

        elementData[size++]=e;//size从0开始自加 先赋值否则应该是++size



    }

    @Override
    public String toString() {//重写toString方法,容器输出
       StringBuilder sb=new StringBuilder();//用StringBuilder存储并输出
        sb.append("[");
        for (int i = 0;i<size ; i++) {
            sb.append(elementData[i]+",");
        }
        sb.setCharAt(sb.length()-1,']');//【】格式输出
        return sb.toString();
    }


    public Object get(int index){//定义get函数,返回泛型类型
        if(index>=0&&index<elementData.length){//判断索引是否合法
        return  elementData[index];}
        else throw new RuntimeException("下标值越界");
    }
    public void set(E element,int index){
        if(index>=0&&index<elementData.length){
            elementData[index]=element;
        }
        else throw new RuntimeException("下标值越界");
    }
   /** 小技巧:在这里可以统一定义一个下标检查函数,若下标越界则抛出异常,这样就让上面两个方法精简*/

    public void remove(E element){//将传入元素与容器内元素依次比较
        for (int i = 0; i <size ; i++) {
            if(element.equals(get(i))){//若传入元素与内部相等,则调用移除,容器内比较用equals
                removes(i);
            }
        }
    }
    public void removes(int index){
        if(index<size-1) {
            System.arraycopy(elementData, index + 1, elementData, index, size - index - 1);
            elementData[size - 1] = null;//将末尾置空
            size--;//将末尾删除
        }
        if(index==size-1){
            elementData[size-1]=null;
            size--;
        }
    }

}

只是为了练手
设计主类测试

xjhArrayList <Integer> x=new xjhArrayList<>();//定义一个xjhArrayList类型的容器
for (int i = 0; i <10 ; i++) {
    x.add(i);
}
System.out.println(x.toString());
x.set(2,0);
x.remove(2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值