首頁 > 軟體

淺談Java當作陣列的幾個應用場景

2022-11-09 14:01:39

前言

對於陣列,在C語言中就有過學習,但是,並沒有怎麼進行總結過,所以,筆者在Java中,對陣列的幾個簡單的應用場景進行總結一下:

1.儲存資料

    public static void main(String[] args) {
            int[] array = {1, 2, 3};
            for(int i = 0; i < array.length; ++i){
                System.out.println(array[i] + " ");
            }
        }

程式碼的執行結果為:

2.. 引數傳基本資料型別

  public static void main(String[] args) {
        int num = 0;
        func(num);
        System.out.println("num = " + num);
    }
    public static void func(int x) {
        x = 10;
        System.out.println("x = " + x);
    }

程式碼的執行結果為:

發現在func方法中修改形參 x 的值, 不影響實參的 num 值.

3.. 引數傳陣列型別(參照資料型別)

    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        func(arr);
        System.out.println("arr[0] = " + arr[0]);
    }
    public static void func(int[] a) {
        a[0] = 10;
        System.out.println("a[0] = " + a[0]);
    }

 程式碼的執行結果為:

 發現在func方法內部修改陣列的內容, 方法外部的陣列內容也發生改變. 因為陣列是參照型別,按照參照型別來進行傳遞,是可以修改其中存放的內容的。

總結: 所謂的 "參照" 本質上只是存了一個地址. Java 將陣列設定成參照型別, 這樣的話後續進行陣列引數傳參, 其實 只是將陣列的地址傳入到函數形參中. 這樣可以避免對整個陣列的拷貝(陣列可能比較長, 那麼拷貝開銷就會很大).

4. 作為函數的返回值

比如:獲取斐波那契數列的前N項

public class Main {
    public static int[] fib(int n){
        if(n <= 0){
            return null;
        }
        int[] array = new int[n];
        array[0] = array[1] = 1;
        for(int i = 2; i < n; ++i){
            array[i] = array[i-1] + array[i-2];
        }
        return array;
    }
    public static void main(String[] args) {
        int[] array = fib(10);
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

程式碼的執行結果為:

 拓展講解:

1.作為函數的返回值部分:

    public static void func1(int[] array) {
        array=new int[]{15,16,17};
    }
    
    public static  void func2(int[] array) {
        array[0]=99;
    }
 
    public static void main(String[] args) {
        int[] array1={1,2,3,4};    
 
        func1(array1);            //列印結果: [1,2,3,4]   
       // func2(array1);           //列印結果: [99,2,3,4]
 
    }

在上述程式碼中:對func1進行分析:

 形參的改變,不會影響實參!!

在上述程式碼中:func1僅僅是改變了形參的指向,並沒有影響的實參

對func2進行分析:

 在func2函數中,傳遞的是參照,我們可以通過參照來改變原來的值!!

總結一下:

當陣列作為引數進行傳遞的時候,其實還是按值傳遞的,此時的值是一個地址!!那麼就會出現兩種情況:

情況1:形參修改指向,array=new int[10];  只會影響形參的指向!

比如:

  public static void func1(int[] array) {
        array=new int[]{15,16,17};
    }
   
 
    public static void main(String[] args) {
        int[] array1={1,2,3,4};    
 
        func1(array1);            //列印結果: [1,2,3,4]   
       
    }

情況2:形參修改指向物件的值: array[0]=99,此時才會影響到實參!

  public static  void func2(int[] array) {
        array[0]=99;
    }
 
    public static void main(String[] args) {
        int[] array1={1,2,3,4};
       
       // func2(array1);           //列印結果: [99,2,3,4]
 
    }

2.陣列作為函數的返回值

   public  static int[] func10() {
        int[] tmpArr={11,22,33};
        return tmpArr;
    }
    public static void main(String[] args) {
        int[] array=func10();
        System.out.println(Arrays.toString(array));  //[11,22,33]
    }

上述程式碼的執行結果為:

 畫圖分析為:

 解析:tmpArr 是在函數裡面建立的區域性變數!當遇見return 的時候,這個方法就結束了,那麼tmpArr 就會被回收掉了(銷燬),那麼,就意味著,tmpArr把值傳遞給array後,就被回收了!!

3.方法內部接收陣列,並且返回陣列!

    public static int[] grow(int[] array) {
        for (int i = 0; i < array.length; i++) {
            array[i]=array[i]*2;
        }
        return array;
    }
 
    public static void main(String[] args) {
        int[] array={1,2,3,4,5,6,7,8};
 
        int[] ret=grow(array);
 
        System.out.println(Arrays.toString(array));  //[2, 4, 6, 8, 10, 12, 14, 16]
        System.out.println(Arrays.toString(ret));    //[2, 4, 6, 8, 10, 12, 14, 16]
    }

上述程式碼的執行結果為:

畫圖解析一下:

但是,另外一種寫法: 我們需要簡單思考一下喲!!

     public static int[] grow(int[] array) {
        int[] tmpArray =new int[array.length];//java支援這種陣列的建立!!裡面可以是變數!
        for (int i = 0; i < array.length; i++) {
            tmpArray[i]=array[i]*2;
        }
        return tmpArray;
    }
 
    public static void main(String[] args) {
        int[] array={1,2,3,4,5,6,7,8};
        int[] ret=grow(array);
        System.out.println(Arrays.toString(array));  //[1, 2, 3, 4, 5, 6, 7, 8]
        System.out.println(Arrays.toString(ret));    //[2, 4, 6, 8, 10, 12, 14, 16]
    }

程式碼的執行結果為:

畫圖解析為:

總結

到此這篇關於Java當作陣列的幾個應用場景的文章就介紹到這了,更多相關Java陣列應用場景內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com