Java数组的长度之谜

版权声明:转载请注明出处。 https://blog.csdn.net/bagpiping/article/details/83900314

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

  • int [] a = new int[4]; //指定数组长度为4
  • int [] b = {23,43,56,78}; //长度为4,索引范围0到3
  • int [] c = new int[]{1,2,3}; //不需要指定数组长度

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

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

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

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

第一步:定义一个“更大的”数组,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的长度是不是变了
  • “长度可变的”数组实现了。在向数组增删元素的时候都可以这么折腾,尤其是删除大数组中元素的时候,“搬家”过程异常繁杂,繁杂到计算机愿意做一天加法不愿意折腾半天内存。

猜你喜欢

转载自blog.csdn.net/bagpiping/article/details/83900314