接下來對數組的復制,以及二維數組的知識進行整理。
數組的復制
一維數組的復制常用有兩種方法,一個為System.arraycopy(原數組,原數組復制起始位置,新數組,新數組復制起始位置,要復制的長度),一個為Arrays.copyOf(原數組,要復制的長度)方法,兩者復制的過程中都將創建新數組,下面記錄一下。
import java.util.Arrays;
public class ArrayCopyDemo{
public static void main(String[] args){
//數組的復制
int[] arr=new int[]{1,5,7,9,10,11,45};
System.out.println("復制前的數組"+arr);
//新數組
int[] newArr=new int[3];
//數組復制第一種
System.arraycopy(arr,0,newArr,0,2);
System.out.println(Arrays.toString(newArr));
//數組復制的第二種方法,可以應用於擴容
arr=Arrays.copyOf(arr,10);
System.out.println("復制后的數組"+arr);
System.out.println(Arrays.toString(arr));
}
}
測試結果
通過結果可以看出,第二種方法復制的arr,已經是一個新的數組,Arrays.copyOf方法底層調用了System.arraycopy()方法。
二維數組
存儲一維數組的數組,數組元素是一維的。定義格式為:
數據類型[][] 數組名=new 數據類型[一維數組的個數][一維數組的長度],可以類似用矩陣來理解,第一個參數代表行數,第二個參數代表列數。二維數組的定義有如下三種方式,注意二維數組不是在堆內存中開辟了一個矩陣區域,如arr1其定義了3*3的二維數組,剛開始是在堆內存中開辟了一塊區域A,分為三份,每一份區域保存的是一個地址,這個地址指向一個一維數組,一維數組同樣是在堆內存中的一個區域,其根據第二個參數,開辟對應的區域存儲內容,因此內容是保存在一維數組里,3個一維數組的內存地址保存在區域A。
import java.util.Arrays;
public class TwoDimensonArrayDemo{
public static void main(String[] args){
//二維數組定義的三種方式
//1 一次性定義一維數組數目,和一維數組大小
int[][] arr1=new int[3][3];
//遍歷
for(int i=0;i<arr1.length;i++){
//打印每個一維數組
System.out.println(arr1[i]);
}
//2 定義一維數組的數目,剛開始沒有指定一維數組的大小,后面每行單獨指定
int[][] arr2=new int[3][];
arr2[0]=new int[6];
arr2[1]=new int[2];
arr2[2]=new int[3];
//遍歷
for(int i=0;i<arr2.length;i++){
//打印每個一維數組
System.out.println(arr2[i]);
}
//3 定義數組時直接給定數組的內容
int[][] arr3={{1,2},{4,5,6},{7,8,9,10}};
//遍歷
for(int i=0;i<arr3.length;i++){
//打印每個一維數組內容
System.out.println(Arrays.toString(arr3[i]));
}
}
}
測試結果
二維數組應用
現在使用二維數組打印一個楊輝三角,具體參考代碼。
import java.util.Scanner;
public class YanghuiTriangle{
public static void main(String[] args){
//打印出楊輝三角到控制台-使用二維數組
/**
楊輝三角如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
*/
//可以看出楊輝三角的規律,如果用二維數組來看,就是除了每行首尾都是1外,其他位置元素:
//arr[i][j]=arr[i-1][j]+arr[i-1][j-1]
System.out.println("請輸入楊輝三角行數");
Scanner scan=new Scanner(System.in);
//行
int row=scan.nextInt();
//定義一個二維數組,行確定,列不確定
int[][] triangle=new int[row][];
for(int i=1;i<=row;i++){
//初始化每一行一維數組的長度
triangle[i-1]=new int[i];
//確定內容
triangle[i-1][0]=1;//首
triangle[i-1][triangle[i-1].length-1]=1;//尾
for(int j=1;j<triangle[i-1].length-1;j++){
if(i!=1){
triangle[i-1][j]=triangle[i-2][j]+triangle[i-2][j-1];
}
}
}
//打印出楊輝三角
for(int[] piece:triangle){
for(int i:piece){
System.out.print(i+"\t");//使用制表符,對齊數字
}
//換行
System.out.println();
}
}
}
測試結果
結論
以上是數組的復制,以及二維數組相關的知識,記錄一下。