因为数组是在内存中连续的一段存储空间,所以数组一旦被创建,空间就固定了,长度是不能扩增的。
数组的长度是固定的,如果需要扩充**,必须创建新数组,原数组的长度要复制到新数组中 。**
java中,数组类型的变量传值的时候,事实上传递的是数组的地址 。
数组扩容的三种方式:
- 新建一个数组,把原来数组的内容搬到 新数组中。
- 用系统定义函数system.arraycopy实现扩容;
- 用系统定义函数copyof函数实现扩容;
下面用程序来实现这三种扩容
class expand2{ //利用函数的方法进行数组的扩充 public static void main(String[] args) { //定义一个小型的数组 int[] a={1,2,3,5}; //调用扩容函数 //a=expand2(a); //a=expand3(a); a=expand4(a); //测试是否扩容完成,输出此时数组a中的值 for (int i=0;i<a.length;i++) { System.out.println("aaaa:"+a[i]); } } //扩容函数, public static int[] expand2(int a[]){ //定义一个新数组b,并为其赋值长度为数组a的二倍 int b[] = new int[a.length*2]; //将数组a的元素循环遍历到数组b中 for (int i=0;i<a.length;i++) { b[i] = a[i]; } //返回扩容后的数组b return b; } //数组扩容方法3,利用系统函数arraycopy进行扩容 public static int[] expand3(int a[]){ int[] b = new int[a.length*2]; //系统函数进行扩容,将a[]的值赋值到b[]中,共a.length个长度。 //相当于第19-21行 System.arraycopy(a,0,b,0,a.length); return b; } //数组扩容方法4,利用系统函数copy进行扩容 public static int[] expand4(int a[]){ //可以查看api文档,java.util.Arrays.copyOf的详细使用; return java.util.Arrays.copyOf(a,a.length*2); } }