1. 程式人生 > >Java中陣列的定義及初始化

Java中陣列的定義及初始化

文章目錄

1. 定義及初始化

1. 1動態初始化(宣告並開闢陣列)

陣列型別[] 陣列名 = new 資料型別[陣列長度];

 其中,資料型別可以是8種基本的資料型別,也可以是引用資料型別
注意:

  • 在給陣列命名的時候,一般在陣列名後加一個 s 表示這是一個包含多個元素的陣列(與單個變數區分)。
  • 當陣列採用動態初始化開闢空間之後,陣列之中的每個元素都是該資料型別的預設值。
資料型別 預設初始化
byte、short、int、long 0
foat、double 0.0
char 一個空字元,即 ‘\u0000’
boolean false
引用資料型別 null,表示變數不引用任何物件
  • 陣列名稱.length:取得陣列長度(陣列長度可以由屬性length獲得)。
  • 陣列遍歷推薦使用for-each迴圈(僅限於陣列內容讀取),要修改陣列內容,還是使用常規for迴圈:for(int x: 陣列名稱) {……}
public class Study02{
    public static void
main(String[] args){ int[] arrays = new int[5]; //定義並開闢了一個長度為3的陣列 // 可以將上面程式碼分成兩句來寫 int[] array = null; // 宣告一個長度int[]型別的變數,變數會佔用一塊記憶體空間,它沒有分配初始值。 array = new int[5]; //建立一個長度為5的陣列,將陣列的地址賦給變數arrays。 for(int i = 0; i < arrays.length; i++) { System.out.println("arrays[" + i + "] = " + arrays[i] + " "); } arrays[0] = 10; //陣列的第一個元素 arrays[1] = 20; //陣列的第二個元素 // 陣列遍歷 for(int x : array) { System.out.println(array[x]); } } }

在這裡插入圖片描述

1.2 靜態初始化

簡化格式:
	資料型別[] 陣列名稱 = {值, 值, …};
完整格式(推薦):
	資料型別[] 陣列名稱 = new 資料型別[]{值, 值, …};

注意:
 a. 通過陣列下標索取來取得元素,下標預設從0開始。陣列下標超出陣列長度,陣列越界異常(執行時異常)。
 b. 陣列屬於引用資料型別,在使用之前一定要開闢空間(例項化),否則就會產生"NullPoninterException"。

	int[] arrays = {1, 2, 3, 4, 5};
	int[] arrays = new int[]{1, 2, 3, 4, 5};

陣列的最大缺陷:長度固定(存在越界問題)。

2. 引用傳遞

 陣列作為引用資料型別,也可以發生引用傳遞。
 引用傳遞空間:同一塊堆記憶體空間可以被不同的棧記憶體所指向。
範例: 多個棧記憶體指向相同的堆記憶體。

public class Study02{
    public static void main(String[] args){
        int[] arr = new null;
        int[] temp = null;  // 宣告物件
        arr = new int[3];   // 開闢一個長度為3的陣列
        System.out.println(arr.length);
        arr[0] = 1; // 陣列第一個元素
        arr[1] = 2; // 陣列第二個元素
        arr[2] = 3; // 陣列第三個元素
        for(int i = 0; i < arr.length; i++)
        {
            //通過迴圈控制索引下標更改
            System.out.println(arr[i]);
        }
        temp = arr; // 發生引用傳遞,不能出現[]
        temp[0] = 55;  // 修改資料
        System.out.println(arr[0]);
    }
}  

在這裡插入圖片描述
注意: 在陣列定義時直接設定內容,根據值的個數確定長度,且長度不可修改。

3. 二維陣列的基本瞭解

二維陣列的初始化

  • 動態初始化
     資料型別[][] 物件陣列 = new 資料型別[行個數][列個數];
  • 靜態初始化
     資料型別[][] 物件陣列 = new 資料型別[][]{{值, 值, …}, {值, 值, …}, …};

陣列的陣列就是二維陣列。
舉例:定義一個二維陣列

public class ArrayDemo{
    public static void main(String[] args){
        //陣列並不是等列陣列
        int[][] data = new int[][]{
                                    {1, 2, 3}, 
                                    {4, 5}, 
                                    {6, 7, 8, 9}};
        for(int i = 0; i < data.length; i++)
        {
            for(int j = 0; j < data[i].length; j++)
            {
                System.out.print("data[" + i + "][" + j + "]="
                 + data[i][j] + " ");
            }
            System.out.println();
        }

    }
}

在這裡插入圖片描述

4. 陣列與方法的互操作

4.1 方法接收陣列

舉例:

public class ArrayDemo{
    public static void main(String[] args){
        int[] data = new int[]{1, 2, 3, 4, 5};
        printArray(data);   //其效果等價於 int[] temp = data;
    }
    public static void printArray(int[] temp){
        for(int i = 0; i < temp.length; i++)
        {
            System.out.print(temp[i] + " ");
        }
        System.out.println();
    }
}

4.2 方法返回陣列

舉例:

public class ArrayDemo{
    public static void main(String[] args){
        int[] data = init();
        printArray(data);
    }
    //定義一個返回陣列的方法
    public static int[] init()
    {
        return new int[] {11, 22, 33, 44, 55};//匿名陣列:只使用一次就失效了
    }
    public static void printArray(int[] temp){
        for(int i = 0; i < temp.length; i++)
        {
            System.out.print(temp[i] + " ");
        }
        System.out.println();
    }

}

現在陣列上發生了引用傳遞,意味著在接收陣列時可以修改陣列。在這裡插入圖片描述

4.3 方法修改陣列

舉例:

public class ArrayDemo{
    public static void main(String[] args){
        int[] data = init();//接收了陣列,發生了引用傳遞,可以修改返回的陣列
        bigger(data);
        printArray(data);
    }
    //定義一個返回陣列的方法
    public static int[] init()
    {
        return new int[] {11, 22, 33, 44, 55};//匿名陣列:只使用一次就失效了
    }
    //將陣列中每個元素的值擴大兩倍
    public static void bigger(int[] arr)
    {
        for(int i = 0; i < arr.length; i++)
        {
            arr[i] *= 2;    //每個元素擴大兩倍
        }
    }
    //列印陣列
    public static void printArray(int[] temp){
        for(int i = 0; i < temp.length; i++)
        {
            System.out.print(temp[i] + " ");
        }
        System.out.println();
    }
}

在這裡插入圖片描述

5. Java對陣列的支援

5.1 排序

java.util.Arrays.sort(陣列名稱)
支援所有基本資料型別
內部使用雙軸排序(瞭解)

import java.util.Arrays;

public class Arrayss{
    public static void main(String[] args){
        int[] arr1 = new int[]{2, 3, 6, 4, 7};
        char[] arr2 = new char[]{'a', 'v', 'e', 'b'};
        //排序
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        PrintArrays(arr1);
        PrintArrays(arr2);

    }
    //列印陣列
    public static void PrintArrays(int[] data){
        for(int x : data)
        {
            System.out.print(x + " ");
        }
        System.out.println();
    }
    public static void PrintArrays(char[] data){
        for(int x : data)
        {
            System.out.print((char)x + " ");
        }
        System.out.println();
    }
} 

在這裡插入圖片描述

5.2 陣列的拷貝

5.2.1 陣列的部分拷貝

System.arraycopy(源陣列名稱, 源陣列開始點, 目標陣列名稱, 目標陣列開始點, 拷貝長度);
源陣列data為:1, 2, 3, 4, 5,6
目標陣列arr為:11, 22,33,44,55,66,77
經過 System.arraycopy(data, 1, arr, 2, 3); 拷貝後,從data[1]開始完後拷貝3個元素,存放在從arr[2]開始的arr陣列中。
部分拷貝後:
目標陣列arr為:11,22,2,3,4,66,77
在這裡插入圖片描述

public class Arrayss{
    public static void main(String[] args){
        int[] data = new int[]{1, 2, 3, 4, 5, 6};
        int[] arr = new int[]{11, 22, 33, 44, 55, 66, 77};
        System.out.print("data陣列為:");
        printArrays(data);
        System.out.print("arr陣列為:");
        printArrays(arr);

        System.arraycopy(data, 1, arr, 2, 3);
        System.out.println("拷貝後兩個陣列為:");
        System.out.print("data陣列為:");
        printArrays(data);
        System.out.print("arr陣列為:");
        printArrays(arr);
    }
    public static void printArrays(int[] data){
        for(int x : data)
        {
            System.out.print(x + " ");
        }
        System.out.println();
    }
}

在這裡插入圖片描述

5.2.2 陣列全拷貝

需引入java.util.Arrays;
==陣列型別[] 目標陣列名 == = Arrays.copyOf(源陣列名稱, 新陣列長度);
舉例:

import java.util.Arrays;

public class Arrayss{
    public static void main(String[] args){
        int[] data = new int[]{1, 2, 3, 4, 5, 6};
        int arr[] = Arrays.copyOf(data, 3);
        System.out.print("arr陣列為:");
        printArrays(arr);
    }
    public static void printArrays(int[] data){
        for(int x : data)
        {
            System.out.print(x + " ");
        }
        System.out.println();
    }
}

使用該方法無需實現使用new關鍵字對物件進行記憶體單元的分配。