数组扩容与缩容

1. 扩容简介

壹哥在前面给大家说过,数组一旦创建初始化后,其长度就不能被改变。但是有的小伙伴就说了,”不对啊,我看别人的文章说,可以往数组中增加很多新数据啊......“。那如果是这样,假如我们一开始定义一个长度为5的数组,然后想把10个数据元素都插进去,这能不能实现?

大家想一下,你能把10升水装到5升的瓶子中吗?肯定不行!如果你非要把10升水都装到瓶子里,肯定需要换一个新的更大的瓶子!

所以今天壹哥跟大家说的”数组扩容“,其实并不是将这些多余的数据装到原有的数组中,而是创建一个新的更大的数组,再把原有数组中的内容都复制到新数组中来!

2. 扩容与缩容流程(重点)

在Java中,数组的”扩容“和”缩容“,并不是真的改变原有数组的大小,而是创建一个新的数组,然后再进行操作,具体流程如下:

步骤1:定义一个新数组,新数组的长度要比原数组增加或者减小;

步骤2:将原数组中的元素拷贝到新数组中;

步骤3将原数组的名称变量指向新数组。

3. 代码实现

接下来壹哥就按照上面的流程,来带大家实现一下数组的扩容和缩容。

3.1 扩容代码

以下代码是进行数组扩容的案例。

public class Demo05 {

    public static void main(String[] args) {
        // 数组扩容

        // 原数组
        int[] oldArr = { 1, 3, 46, 22, 11 };

        // 1.定义一个新数组,长度比原数组的长度多1,用于扩容
        int[] newArr = new int[oldArr.length + 1];

        // 2.数组拷贝
        for (int i = 0; i < oldArr.length; i++) {
            //数组拷贝,将原来数组的元素拷贝到新数组中
            newArr[i] = oldArr[i];
        }

        // 3.将原数组的名称变量指向新数组
        oldArr = newArr;

        System.out.println("数组长度="+oldArr.length);
        //遍历数组
        for (int i = 0; i < oldArr.length; i++) {
            //最后一个元素的值是默认值0
            System.out.println(oldArr[i]);
        }
    }

}

这里我们使用newArr[i] = oldArr[i];这样的语句,将旧数组中的元素拷贝到新数组中

3.2 缩容代码

以下代码是进行数组缩容的案例。

public class Demo06 {

    public static void main(String[] args) {
        // 数组缩容

        //定义一个原数组
        int[] oldArr = {1,3,46,22,11};

        //1.定义一个新数组,新数组的长度比原数组长度少1个
        int[] newArr = new int[oldArr.length-1];

        //2.进行数组拷贝,将旧数组中的元素拷贝到新数组中
        for (int i = 0; i < newArr.length; i++) {
            newArr[i] = oldArr[i];
        }

        //3.将原数组的名称变量指向新数组
        oldArr = newArr;

        for (int i = 0; i < newArr.length; i++) {
            System.out.println(oldArr[i]);
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,顺序表可以使用数组来实现。当顺序表中的元素个数超过了数组的容量时,需要进行扩容操作,以保证能够继续添加元素。反之,当顺序表中的元素个数变得很少时,可以进行缩容操作,以节约内存空间。 下面是Java中顺序表的扩容缩容实现方法: 1. 扩容Java中,数组的容量是固定的,无法动态改变。因此,当需要对数组进行扩容时,需要先创建一个新的数组,将原数组中的元素复制到新数组中,然后再将新元素添加进去。具体步骤如下: ```java public void expandCapacity() { // 创建新数组,长度为原数组的两倍 int newCapacity = elements.length * 2; E[] newElements = (E[]) new Object[newCapacity]; // 将原数组中的元素复制到新数组中 for (int i = 0; i < size; i++) { newElements[i] = elements[i]; } // 将新元素添加到新数组中 newElements[size] = element; // 更新顺序表状态 elements = newElements; size++; } ``` 2. 缩容Java中,通过设置数组的长度为0来实现缩容操作。具体步骤如下: ```java public void shrinkCapacity() { // 创建新数组,长度为0 E[] newElements = (E[]) new Object[0]; // 将原数组中的元素复制到新数组中 for (int i = 0; i < size; i++) { newElements[i] = elements[i]; } // 更新顺序表状态 elements = newElements; size = 0; } ``` 需要注意的是,在进行缩容操作时,如果新数组长度为0,那么原数组中的元素就会全部被丢弃,因此需要确保在进行缩容操作之前,顺序表中的元素已经被保存到其他地方了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值