Java數組復制和二維數組


接下來對數組的復制,以及二維數組的知識進行整理。

數組的復制

一維數組的復制常用有兩種方法,一個為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();
		}
	}
}

測試結果

結論

以上是數組的復制,以及二維數組相關的知識,記錄一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM