手工实现Arraylist

package cn.手工实现Arraylist;
/*
自定义实现ArrayList , 体会底层原理
实现泛形
 */

public class 实现增加 <E>{
    private Object[]  elementDate;    //定义 私有的 elementDate 数组
    private int size;                   //定义 私有的   Int  值 size

    private static final int DEFALT_CAPACITY=10;   //用 final 定义 私有的 常量

    public 实现增加(){                                                   //构造方法 实现最底层数组 长度为 DEFALT_CAPACITY
        elementDate =new Object[DEFALT_CAPACITY];

    }


    public  实现增加(int capacit){                                     //构造方法   实现自己定义数组长度

        if(capacit<0){
            throw new RuntimeException("数组长度补能为负数");
        }else if (capacit==0){
            elementDate=new Object[DEFALT_CAPACITY];
        }else {
            elementDate =new Object[capacit];
        }

    }





    public void add(E element){                                        //实现  增加元素的方法   没有范型的可以使用 Object obj
        if(size==elementDate.length){
            //扩容
            Object[] newArray=new Object[elementDate.length+(elementDate.length>>1)];  //使用右移更加快速  10+10/2   注意运算符的优先级
            System.arraycopy(elementDate,0,newArray,0,elementDate.length);   //复制
            elementDate=newArray;

        }

        elementDate[size++]=element;
    }





    //实现get方法

    public E get(int v){
        if(v<0){
            throw new RuntimeException("索引值不能为负数"+v);
        }else if (v>size){
            throw new RuntimeException("索引超出范围"+v);
        }
        else {
         return (E)elementDate[v];
        }
    }


   //实现set方法
    public void set(E a,int b){

        if(b<0||b>size-1){
            //不合法
            throw new RuntimeException("索引不合法"+b);
        }
        elementDate[b]=a;
    }


public void remove(E e){
        for(int i=0;i<size;i++){
            if(e.equals(get(i))){
                remove(i);
            }else {
                throw new RuntimeException("没有该元素");
            }
        }

}
public void  remove(int a){
        int b=elementDate.length-a-1;
        if(a>0){
        System.arraycopy(elementDate,a+1,elementDate,a,b);}
        else {
            throw new RuntimeException("不能为负数");
        }
}




    //重写toString 方法
    public String toString(){
        StringBuilder sb = new StringBuilder();
        //[a,b,c]
        sb.append("[");
        for (int i =0;i<size;i++){
            sb.append(elementDate[i]+",");
        }
        sb.setCharAt(sb.length()-1,']');
        return sb.toString();
    }





    public static void main(String[]args){
        实现增加 a=new  实现增加();
        for(int i=0;i<30;i++){
            a.add(i);
        }
        a.remove(25);
        a.remove("fafa");
        System.out.println(a);
    }

}


发布了30 篇原创文章 · 获赞 0 · 访问量 422

猜你喜欢

转载自blog.csdn.net/weixin_45736498/article/details/103720775