全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

什么是数组的扩容

发布时间:2023-03-22 17:56:00
发布人:qyf

什么是数组的扩容

  扩容简介

  大家都清楚,数组一旦创建初始化后,其长度就不能被改变。但是有的小伙伴就说了,”不对啊,我看别人的文章说,可以往数组中增加很多新数据啊......“。那如果是这样,假如我们一开始定义一个长度为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 的性能。

相关文章

python写入json文件?

python写入json文件?

2023-11-02
vscode设置tab为4个空格?

vscode设置tab为4个空格?

2023-11-02
更新pycharm?

更新pycharm?

2023-11-02
anaconda每次打开都要安装?

anaconda每次打开都要安装?

2023-11-02

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取