美文网首页
java容器之自定义ArrayList

java容器之自定义ArrayList

作者: 赶路人_3864 | 来源:发表于2019-04-18 19:12 被阅读0次

前言
在Java中我们常常用到容器List、Set、map,在这里我重写Arraylist,以更好的了解java源码下面我们用一副图来表示容器

360截图170810259081103.png

方法实现

自定义容器:

package arraylist;
public class Mycollection <E>{
    Object[] obj=new Object[5];
    public void set(E objs,int index){
        obj[index]=objs;
    }
    public  Object get(int index ){
        return obj[index];
    }
}

自定义arraylist:

package arraylist;

import java.util.Arrays;

public class NewArrayLIst<E> {
    //定义Object数组
    private Object[] elementData;
    //定义集合内容长度
    private int size;
    //定义集合初始长度
    private static final int Defalt_capacity=10;
    //构造方法一
    public NewArrayLIst(){
        elementData=new Object[Defalt_capacity];
    }

    //构造方法二
    public  NewArrayLIst(int capacity){
        elementData=new Object[capacity];
    }

    //增加元素方法考虑扩容方法
    public void add(E obj){

        //如果到达最大长度则扩容长度
        if(size==elementData.length){
            Object[] newArray=new Object[elementData.length+(elementData.length>>1)];//10-->10+10/2
            //拷贝老数组
            System.arraycopy(elementData,0,newArray,0,elementData.length);
            elementData=newArray;
        }
        elementData[size++]=obj;
    }

    //toString 方法
    public String toString(){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for(Object obj:elementData){
            if(obj!=null)
            sb.append(obj+",");
        }
        sb.setCharAt(sb.length()-1,']');
        return sb.toString();
    }

    //set检查索引抛出异常
    public void set(E element,int index){
        if(index<0||index>=size){
            throw new RuntimeException();
        }
        elementData[index]=element;
    }

    //get
    public Object get(int index){
        return  elementData[index];
    }
}

相关文章

网友评论

      本文标题:java容器之自定义ArrayList

      本文链接:https://www.haomeiwen.com/subject/kufxgqtx.html