集合源码基础之数组扩容技术
数组复制1:Arrays.copyOf(Object[] objects, int length)
Arrays.copyOf(Object[] objects, int length)功能是实现数组的复制,返回复制后的数组。参数为被复制的数组和复制的长度(复制以后不足的按照null填充)。java
package top.flygrk.ishare.list.test; import java.util.Arrays; /** * @Author: flygrk * @Version: 1.0 * @Description: 数组扩容技术 */ public class ArrayCopy { public static void main(String[] args) { Object[] objects = {1, 2}; System.out.println("当前数组长度: " + objects.length); //返回新的数组,将原来的长度为2的数组,如今扩容到10, 原来自己的数据不变 Object[] copyNewObjects = Arrays.copyOf(objects, 10); System.out.println("copyNewObjects: " + copyNewObjects.length); } }
数组复制2:System.arraycopy(Object src, int srcPos,Object dest, int destPos,int length);
System.arraycopy()方法若是是数组比较大,那么使用System.arraycopy()会比较有优点,由于其使用的是内存复制,省去了大量的数组寻址访问等时间。复制指定源数组src到目标数组dist。复制从源数组src的srcPos索引开始,复制长度为length,复制到dest数组的开始索引为destPos。数组
package top.flygrk.ishare.list.test; import java.util.Arrays; /** * @Author: flygrk * @Version: 1.0 * @Description: 数组扩容技术 */ public class ArrayCopy { public static void main(String[] args) { int[] fun = {0, 1, 2, 3, 4, 5, 6}; System.arraycopy(fun, 0, fun, 3, 3); for (int i: fun) { System.out.print(i + " "); } } } //运行结果: 0 1 2 0 1 2 6
- System.arraycopy() 源码:
/** * @Description: 数组复制 * @Param src: 源数组 * @Param srcPos: 源数组复制开始的下标 * @Param dest: 目标数组 * @Param destPos: 目标数组存放的开始下标 * @Param length: 复制长度 */ public static native void arraycopy( Object src, int srcPos, Object dest, int destPos, int length );
注意: 上述代码,若是复制的length超越了(数组的长度-起始位置的长度),那么就会提示数组下标越界异常。微信