蘇格拉底曾說過,「世界上最快樂的事,莫過於爲理想而奮鬥。」人生短短數十年,何不爲夢想努力一把?其實只要主動追求,夢想並不遙遠。總有一天,你會把它攥在手裏。java
所以咱們學習JAVA就應該不斷的努力學習。今天,e良師益友網就爲你們簡單談下Java對數組的複製知識點。web
定義一個數組int[] a={3,1,4,2,5}; int[] b=a; 數組b只是對數組a的又一個引用,即淺拷貝。數組
若是改變數組b中元素的值,實際上是改變了數組a的元素的值,要實現深度複製,能夠用clone或者System.arrayCopy函數
int[] a={3,1,4,2,5};int[] b=a.clone();b[0]=10;System.out.println(b[0]+" "+a[0]);可是clone和System.arrayCopy都是對一維數組的深度複製。學習
對於二維數組則不同:int[][] a={{3,1,4,2,5},{4,2}};int[][] b=a.clone();b[0][0]=10;System.out.println(b[0][0]+" "+a[0][0]);輸出爲10 10因此clone並不能直接做用於二維數組。spa
由於java中沒有二維數組的概念,只有數組的數組。因此二維數組a中存儲的其實是兩個一維數組的引用。當調用clone函數時,是對這兩個引用進行了複製。orm
要證實,只需看下面的輸出int[][] a={{3,1,4,2,5},{4,2}};int[][] b=a.clone();b[0][0]=10;System.out.println(b[0][0]+" "+a[0][0]);System.out.println(a[0]==b[0]);第5句輸出爲true.用clone對二維數組進行復制,要在每一維上調用clone函數對象
int[][] a={{3,1,4,2,5},{4,2}};int[][] b=new int[a.length][];for(int i=0;i<a.length;i++){ b[i]=a[i].clone();} b[0][0]=10;System.out.println(b[0][0]+" "+a[0][0]);System.out.println(b[0]==a[0]);輸出爲10 3 falseit
小結:效率
數組的複製方法如今至少有四個思路:
1 使用循環結構 這種方法最靈活。惟一不足的地方可能就是代碼較多
2 使用Object類的clone()方法, 這種方法最簡單,獲得原數組的一個副本。靈活形也最差。效率最差,尤爲是在數組元素很大或者複製對象數組時。
3 使用Systems的arraycopy這種方法被告之速度最快,而且靈活性也較好,能夠指定原數組名稱、以及元素的開始位置、複製的元素的個數,目標數組名稱、目標數組的位置。
4 Arrarys類的copyOf()方法與copyOfRange()方法可實現對數組的複製!