一般是这样做的。当访问越界,或者添加数据超过数组当前的length时候。重新申请一个大于等于越界长度的数组。然后通过Sysmem.arraycopy将原先数组的内容拷贝到新的内存块中。如果删除了某些元素,使得capacity(容器大小)远大于实际的length时。可以重新构建trim后的数组并copy过去。这也是ArrayList中的实现方法。System.arraycopy是一个native方法,拷贝效率比较高。或者你看下arraylist的源码就明白了
Java的数组是固定长度的。比如int[] arr = new int[5],这就是声明和初始化了容量为5的整形数组。一旦初始化不能变化。 如果想要添加更多的元素到数组里,需要进行“扩容”。其实是创建新的数组,然后进行数据拷贝,以下为参考的“扩容”方法。 int[] arr = new int[5];public void expand(){ int[] buf=new int[a.length*2]; System.arraycopy(a,0,buf,0,a.length); arr = buf; }