动态数组

@目录

为什么要使用动态数组?

我们可以理解为动态数组就是在普通数组上增加了一个可以根据元素的个数动态调整数组大小的功能。静态数组定义之后没办法改变数组的长度,这时候需要我们定义一个类来拓展数组,动态数组相对于一般的数组课以灵活的进行 增 删 查 改操作

原理

  • 原本用来存储数据的数组存满之后
  • 在创建一个新的数组
  • 新数组的长度为原来数组的1.5倍
  • 将原来数组中的变量遍历复制到新的数组之中
  • 接下来再存储就存储到新的数组中

属性

  • 需要存储数据的数组
  • 数组的长度
  • 数组的下标
  • 已经存入的元素个数
public class MyArry {
    //object 类型可以存储任何类型的数据
    //需要存储数据类型的数组
    Object[]arry={};
    //数组长度
    int length;
    //数组下标
    int index;
    //当前数组个数
    int size;

构造方法

//构造方法传入初始变量
    //格式 :public 类名(参数){}
    public MyArry(int  initialCapacity){
        //参数校验
        if (initialCapacity <= 0){
            System.err.println("传入的 initialCapacity 小于或者等于0 不符合要求");
        }else{
            length=initialCapacity;
            arr=new Object[length];
            index=0;
            size=0;
        }

方法

  • add
//基础方法
    public void add(Object e){
        //判断容量是否足够
        if(length<=size){//容量已满需要扩容
            int newlength=length+length>>1;//长度扩大为原来的1.5倍
            Object[] newarr=new Object[newlength];
            //将原来的数组中的数据全部复制到新的数组中
            for (int i = 0; i < arr.length; i++) {
                newarr[i]=arr[i];
            }
            length=newlength;
            arr=newarr;
        }
        //重复调用add方法可以令下标不断增加
        arr[index]=e;
        index++;
        size++;
        
        

    }
  • get
  • remove
  • replace

程序实现入口

public static void main(String[] args) {
        MyArry myArry=new MyArry(10);
        for (int i = 0; i <17; i++) {
` System.out.println(myArry.arr[i]);
        }

    }



}``