集合源碼基礎之數組擴容技術
數組複製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超越了(數組的長度-起始位置的長度),那麼就會提示數組下標越界異常。微信