Java数组的长度之谜

1、数组的三个初始化方法:

  • 指定数组长度为4。 int [] a = new int[4];

  • 指定数组元素。(长度为4,索引范围0到3) int [] b = {23,43,56,78};

  • 指定数组元素。 int [] c = new int[]{1,2,3,4};

2、数组长度不可变的原由

  • 数组在初始化的时候就分配好了内存空间,是静态分配。
  • 如果有200个空间,数组分配了100个,另外100个不知道。如果这时扩展数组,极有可能或者肯定会覆盖周围的数据。数组不可变的原因就是这,是安全性的体现。
  • 底层是怎么实现的暂时不知道。

3、如何自定义一个“长度可变的”数组

  • 初始化场景:int [] arr = {1,2,3,4};现在业务要求给这个数组添加一个元素“5”,所以必须把数组拉长,我们知道Java数组长度是不可变的。
  • 现在怎么办:走三步

第一步:定义一个“更大的”数组,int [] brr = int [ arr.length + 1 ];
第二步:搬家,
	for (int i = 0, i <= arr.length, i++){
		brr [ i ] = arr [ i ];
	}
	brr [ arr.length + 1 ] = 5;  //这是业务要求加的,还记得吧
第三步:“挂羊头,卖狗肉”
	arr = brr;  //现在你看看arr的长度是不是变了
  • “长度可变的”数组实现了。在向数组增删元素的时候都可以这么折腾。类似地,删除大数组中元素的时候,“搬家”过程也是异常繁杂,繁杂到计算机愿意做一天加法不愿意折腾半天内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值