今天遇到了二维数组扩容的问题,用到了两个不同的api,特地记录一下.
## 一.
比如我们原来有个arr数组,现在要往这个数组里面在添加一个res元素,可以用下面这样的写法。
```java
int[][] arr = new int[][]{{1,2}};
int[] res = new int[]{3,4};
arr = Arrays.copyOf(arr,arr.length+1);
arr[arr.length-1] = res;
```
Arrays.copyOf的第一个参数,表示对原来的哪个数组进行扩容,第二个参数是扩容后有多少个元素。这个方法会返回一个新的数组,我们这里重新赋值给arr,此时的arr和原来的不是一个了,如果不写这个赋值动作,arr还是原来那个大小,这里要注意下。最后在往这个新的arr的最后一个位置插入新元素。
## 二.
```java
int[][] arr = new int[][]{{1,2}};
int[][] newarr = new int[arr.length+1][2];
int[] res = new int[]{3,4};
System.arraycopy(arr,0,newarr,0,arr.length);
newarr[newarr.length-1] = res;
```
第二种写法需要自己先new一个新的数组,就是这里的newarr,然后通过System.arraycopy函数把第一个数组中的元素赋值给第二个元素,最后还是需要把新元素插入到新数组的最后一个位置。
System.arraycopy的第一个参数表示原数组
第二个参数表示原数组起始位置
第三个参数表示目标数组
第四个参数表示目标数组起始位置
第五个参数表示赋值原数组的多少个元素(从起始位置开始)
## 总结
其实就是两个不同的拷贝函数Arrays.copyOf和System.arraycopy,在不同的场景下,根据需要使用,比如我们上面说的这个场景,第一个方法方便些,如果遇到需要对特定位置做特殊处理的问题的时候,就需要用第二个了。
二维数组扩容