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