Java-ArrayList基本功能模拟

时间:2021-04-04作者:klpeng分类:IT综合浏览:328评论:0

ArrayList类是java中的动态数组,简单模拟一下ArrayList的功能实现

1.声明成员变量

Object [] elementData = new Object[10]; //声明一片连续空间数组用来存储数据
int size = 0;//实际存储的元素个数

因为存储数据的类型可能有int,float,String类型,所以用Object类来声明一个一维数组elementData。并且用size变量来记录数组存储的个数

2.添加元素

从数组下标为0存储元素,也就是说当前size的变量的值没有元素存储。

//添加元素
public void add(Object obj){//传入要添加的元素obj
        //首先检验数组里面是否可以存储元素(判满),
        ensureCapacity(size);//如果数组容量不足就要扩容
        elementData[size] = obj; //将变量obj传入数组中
        size++; //记录存储元素个数+1
}

3.判满

在添加元素时,应该首先判断数组容量是否能够存储元素,如果数组容量满了,就无法继续向里面添加元素了,那么就需要扩容。

public void ensureCapacity(int length){
    
       if(length>=elementData.length){
            //如果当前数组容量不足,就扩容2倍
            Object []newElementData = new Object[elementData.length*2];
            //将原来的数组里面的元素赋值到扩容后的新数组去
            System.arraycopy(elementData,0,newElementData,0,size);
            //在将原数组指向新数组
            elementData = newElementData;
       }

}

关于System.arraycopy()的用法:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
/*
    也就是从scePos下标开始的scr数组长度为length的所有元素复制给从下标destPos开始的长度为length的dest数组
    第一个参数Object src:传入原始数组名
    第二个参数int scrPos:要复制原始数组的第一个元素的下标
    第三个参数Object dest :传入要复制的数组名
    第四个参数int destPos:要复制的数组的起始下标
    第五个参数int length:要复制的元素个数,从每一个起始下标开始记
    
*/

4.获取下标位置的元素

返回指定索引的元素

public Object get(int index){
    //要获取数组下标的元素的话,就要判断给出的索引index是否合法 index合法的范围为:0~size-1    
    if(index <0||index>size-1){//如果索引不正确就会出现一个异常提示
            throw new IllegalArgumentException("索引号不合法:"+index);
    }
    //如果索引合法,直接返回数组index下标元素就可以啦
    return  elementData[index];
        
}

5.移除指定位置的元素

将指定索引下标的元素在对象中去除,并且返回删除的元素

public Object remove(int index){

    //传入索引的话,就要判断索引是否合不合法,合法的索引范围为0 - size-1
    if(index<0||index>size-1){
        throw new IllegalArgumentException("索引号不合法:"+index);
    }
    Object obj = elementData[index];//记录要删除的元素,方便返回
    System.arraycopy(elementData,index+1,elementData,index,size-index-1);
    size--;//数组内存储的元素减1
    elementData[size]=null;//将最后一个元素初始化
    return obj;
}

6.清空元素

public void clear(){
    //将每一个元素初始化
    for(int i=0;i<size;i++){
        elementData[i] = null;
    }
    size=0;
}

7.判空

public boolean isEmpty(){
   
     return size==0;//如果为0返回true,不是则返回false
}

8.获取实际元素个数

public int size(){

    return size;//size就是数组里元素的个数
}

 

打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢