JAVA之动态数组

目录

一、什么是动态数组

二、动态数组的实现


一、什么是动态数组

Java中提供的数组都是静态数组,即在一个数组定义时确定长度后,使用过程中无法修改此长度。

动态数组就是在普通数组上,增加了一个可以根据元素的个数动态调整数组大小的功能。

二、动态数组的实现

1.创建一个Object类型的value数组,设置数组长度为length,数组元素数为size,并且初始化构造方法

public class MyList {
    Object[] values;// 什么数据都可以存
    int length;//数组长度
    int size;//数组元素数量
    //初始化构造方法
    public MyList(int initLength){
        if(initLength<=0){
            System.err.println ("initLength 小于或者等于 0 不合法!! ");
            // 默认初始 长度设定为10
            length = 10;
            values = new Object[length];
            size=0;
        }else{
            length = initLength;
            values = new Object[length];
            size=0;
        }
    }

2.通过实现添加数组元素、获取数组元素、移除数组元素、代替数组元素的功能来实现动态数组

(1)添加数组元素

  • 创建一个新数组,长度比原来的数组大
  • 遍历原数组元素,将原数组中的元素存入新数组中,替换引用
public void add(Object e){
        // 检测 数组的空间是否足够
        if(size>=length){
            // 扩容 : 创建一个新数组,长度比原来数组大,将原数组中的数据存入新数组中,替换引用
            int oldlength = length;
            int newlength = oldlength+(oldlength>>1);// 1.5倍扩容
            // 新建数组
            length = newlength;
            Object[] newArr = new Object[length];
            for(int i = 0; i < oldlength; i++){
                newArr[i]=values[i];
            }
            // 迭代替换
            values=newArr;
            System.out.println ("扩容完成,新的长度为:"+length);
        }
        values[size]=e;
        size++;
    }

(2)获取数组元素

  • 判断要获取的数组下标是否越界,若越界,报错
  • 判断之后,直接返回要获取的数组元素
    public Object get(int index) {
        if (index < 0 || index >= size) {
            System.err.println("下标越界!!!");
            return null;
        }
        return values[index];
    }

(3)移除数组元素

  • 判断要获取的数组下标是否越界,若越界,报错
  • 后置数据前移
 public void remove(int index){
        if(index<0 || index>=size){
            System.err.println ("下标越界!!!");
            return;
        }
        values[index]=null;
        // 后置数据前移
 
        for(int i=index;i<size-1;i++){
                values[i] = values[i + 1];

        }
        values[size-1] = null;
        // 更新size
        size--;
        System.out.println("新的数组为"+values);
    }

(4)替换数组元素

  • 判断要获取的数组下标是否越界,若越界,报错
  • 替换新的数组元素
    public Object replace(int index,Object value){
        if(index<0 || index>=size){
            System.err.println ("下标越界!!!");
            return null;
        }
        //替换新的数组元素
        Object oldvalue = values[index];
        values[index] = value;
        return oldvalue;
    }

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值