动态数组---使用Java实现

发布时间:2023年12月27日

目录

一、数据结构(手写动态数组)

(1)创建动态数组类

(2)添加元素

(3)删除元素

(4)扩容

二、ArrayList(Java原生包动态数组)


一、数据结构(手写动态数组)

(1)创建动态数组类

我们需要的属性有

(1)静态数组作为容器

(2)size作为逻辑大小

(3)capacity作为容量


//动态数组类
public class DynamicArray {
    //逻辑大小,可以简单理解成也就是当前这个数组的长度
    //size-1是数组中的最后一个元素
    private int size=0;
    private int capacity=8;//容量大小

    private int[] array={};


}

(2)添加元素

在指定索引添加元素,我的思路是这样的,假如是在规定范围内index索引出添加元素,那么index后面的元素要向后移动给他腾地方,之后index换成指定值即可。

 //向最后面添加元素
    public void addLast(int element){
        array[size]=element;
        size++;
    }
    //向指定位置添加元素
    public void add(int index,int element){
      
        if(index>=0&&index<=size-1){
            //插入的位置是在数组内
            //将第一个参数的array数组从index索引开始移动到(复制)到第三个参数的array数组从索引index+1开始,移动的数量是size-index
            System.arraycopy(array,index,array,index+1,size-index);
        }
        //不符合条件的也就是>=size的,下面逻辑也可以走,索引<0暂时不考虑
        array[index]=element;
        size++;
    }

(3)删除元素

删除指定索引处的元素,思路如下:

假如删除index索引处的元素,那么index就后面的元素向前移动一格就行,将index索引处的元素给覆盖就行。

//删除指定索引的值,返回被删除的值
    public int remove(int index){
        int removed=array[index];//被删除的值
        if(index<size-1){
            System.arraycopy(array,index+1,array,index,size-index-1);
        }
        //如果删除的索引是最后一个,直接逻辑大小减一就行
        size--;
        return removed;
    }

(4)扩容

//删除指定索引的值,返回被删除的值
    public int remove(int index){
        int removed=array[index];//被删除的值
        if(index<size-1){
            System.arraycopy(array,index+1,array,index,size-index-1);
        }
        //如果删除的索引是最后一个,直接逻辑大小减一就行
        size--;
        return removed;
    }

二、ArrayList(Java原生包动态数组)

关于这个ArrayList的用法,我之前写过了,大家可以看看:ArratList的基本用法

文章来源:https://blog.csdn.net/gaoqiandr/article/details/135232820
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。