千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 什么是数组的扩容

什么是数组的扩容

来源:千锋教育
发布人:qyf
时间: 2023-03-22 17:56:00 1679478960

什么是数组的扩容

  扩容简介

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

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

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

  扩容与缩容流程(重点)

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

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

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

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

  代码实现

  接下来带大家实现一下数组的扩容和缩容。

  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]);

  }

  }

  }

  接下来大家看看这个这个问题:Java 中 ArrayList 自动扩容的内存上的具体过程是怎样的?

  在 Java 中,ArrayList 是一种可变长度的数组结构,它可以自动扩容以适应添加更多元素的需求。当我们向 ArrayList 中添加元素时,如果当前容量不足,ArrayList 会自动扩容来提供更多的内存。

  具体而言,ArrayList 会创建一个新的数组,其大小通常是当前数组大小的两倍,然后将原始数组中的元素复制到新数组中。这个过程被称为“重新分配底层数组”,它涉及到以下步骤:

  1.当 ArrayList 内部的数组容量不足时,ArrayList 将创建一个新的数组,其大小通常是当前数组大小的两倍。

  2.ArrayList 将原始数组中的元素复制到新数组中。这个过程可以使用 System.arraycopy() 方法来完成,这个方法会快速地将原始数组中的元素复制到新数组中。

  3.ArrayList 将新数组设置为其内部数组,丢弃旧数组,并更新其容量,以便能够容纳更多的元素。

  这个过程需要一些时间和空间开销,因此我们应该尽可能地预测我们需要存储的元素数量,并在创建 ArrayList 时指定初始容量。这样可以避免不必要的重新分配底层数组操作,并提高 ArrayList 的性能。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT