1. 程式人生 > >java中的arraycopy(),copyOf()和copyOfRange()方法詳解

java中的arraycopy(),copyOf()和copyOfRange()方法詳解

java語言提供了很多的方法來對陣列進行復制。其中我們常用的方法有三種,下面一一列舉出來

1. arraycopy()方法

函式原型:arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src: 原陣列                                               srcPos:原陣列起始的位置

dest:目的陣列                                         destPos:目的陣列的起始位置

length:所需複製陣列的長度

需要注意的是要重新宣告一個同類型且長度足夠的陣列,否則會出現異常。

下面舉個例子:

package 筆記;
import java.util.Arrays;//注意這裡
public class Example5_20_3 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a={1,4,6,45,3,2,56,76,5,4,3,4,5,6};
		int[] b=new int[8];//注意陣列的長度
		System.arraycopy(a, 0, b, 0, 8);
		System.out.println(Arrays.toString(b));
}
}

System.arraycopy(a ,0 ,b ,0 ,8)這句話可以翻譯為:把陣列a從下標為0的位置依次開始複製到陣列b下標為0的位置,複製長度為8。

使用arraycopy()方法要實現指明方法的路徑,即標頭檔案的import語句。在我們程式設計過程中不必一條條地去指明路徑,我們可以使用快捷鍵Ctrl+shift+o即可補全所缺的路徑。

輸出的結果是:[1, 4,  6, 45,  3,  2,  56,  76]

arraycopy()方法的主要缺點是必須事先建立好目的陣列。

2.copyOf()方法

函式原型:copyOf(oringinal, int newlength)

oringinal:原陣列      newlength:複製陣列的長度

這個方法是從原陣列的起始位置開始複製,複製的長度是newlength。相比較於前一種,這種相當於特殊的情況,只能從原陣列的起始位置開始複製。

package 筆記;
import java.util.Arrays;
public class Example5_20_4 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a= {3,456,4,3,2,45,5,65,35,6,5,5,43};
		int[] b=new int[8];
		b=Arrays.copyOf(a, 8);
		System.out.println(Arrays.toString(b));
	}
}
輸出的結果是:[3, 456, 4, 3, 2, 45, 5, 65]

3.copyOfRange()方法

函式原型:copyOfRange(oringinal,int from, int to)

該方法是從original陣列的下標from開始複製,到下標to結束

package 筆記;
import java.util.Arrays;
public class Example5_20_5 {
	public static void main(String[] args) {
		// TODO Auto-generated method stu
		int[] a= {3,45,32,42,34,2,1,57,4,3,56,4,65};
		int[] b=new int[8];
		b=Arrays.copyOfRange(a, 2, 10);
		System.out.print(Arrays.toString(b));
	}
}

輸出的結果:[32, 42, 34, 2, 1, 57, 4, 3, 56]

這幾個陣列複製方法是我們最常用的方法。方法的函式體都比較簡單,只是我們平時遇到這些方法的次數不多,且比較分散,導致很多人對這些方法都不熟悉。現在我把我們最常用的方法給羅列到一起,希望對大家有所幫助。