1. 程式人生 > 其它 >java陣列 基本內容

java陣列 基本內容

什麼是陣列

陣列(Array)是有序的元素序列。 若將有限個型別相同的變數的集合命名,那麼這個名稱為陣列名。組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。用於區分陣列的各個元素的數字編號稱為下標。陣列是在程式設計中,為了處理方便, 把具有相同型別的若干元素按有序的形式組織起來的一種形式。 這些有序排列的同類資料元素的集合稱為陣列。

陣列的宣告與建立

Java程式中的陣列必須先進行初始化才可以使用,所謂初始化,就是為陣列物件的元素分配記憶體空間,併為每個陣列元素指定初始值,而在Java中,陣列是靜態的,陣列一旦初始化,長度便已經確定,不能再隨意更改。

首先必須宣告陣列變數,才能在程式中使用陣列。下面是宣告陣列變數的語法:

dataType[] arrayRefVar;   // 首選的方法
 
或
 
dataType arrayRefVar[];  // 效果相同,但不是首選方法 c++沿用
public class Demo01 {
    public static void main(String[] args) {
        //靜態初始化:由程式猿自己確定每個陣列元素的初始值,而陣列的長度則由系統自己決定,
        int[] a = {1,2,3,4,5};
        System.out.println(a.length);
        // 第二行程式碼可以看出,陣列擁有類的性質,可以用dot訪問其變數
        // 第一行程式碼靜態初始化了陣列整型陣列a,賦予其固定的長度,系統可以為其分配空間

        //動態初始化:初始化時由程式猿確定陣列的長度,而沒一個數組元素的值,則由系統來分配初始值,
        int[] b=new int[5];
        System.out.println(b[0]);//預設值是0
        // 很明顯,陣列就是類

        //所以對於陣列變數來說,他並不需要初始化,我們常說的初始化其實是初始化陣列物件而非陣列變數,
        // 有時候我們不進行初始化,而讓陣列變數指向一個有效的陣列物件,陣列也可以使用
        int[] c = {0,1,2,3,4};
        int[] d;
        d = c;
        System.out.println(d[1]);
        // 輸出結果為 1
        d[1] = 99;
        System.out.println(c[1]);
        // 輸出結果為 99

        //利用增強型迴圈輸出如下陣列
        int [] numbers = {10, 20, 30, 40, 50};
        for(int x :numbers){
            System.out.print(x+"  ");
        }
        System.out.println();
        System.out.println("===============");

        String [] names ={"James", "Larry", "Tom", "Lacy"};
        for (String string:names){
            System.out.print(string+" ");
        }


    }


}

java三種初始化和記憶體分析

1.靜態初始化

​ 除了用new關鍵字來產生陣列以外,還可以直接在定義陣列的同時就為陣列元素分配空間並賦值。

​ 例 int[] a={1,2,3};//靜態初始化基本型別陣列

​ Man[] mans={new Man(1,1),new Man(2,2)};//靜態初始化引用型別陣列

2.動態初始化

​ 陣列定義與為陣列元素分配空間並賦值的操作分開進行

​ int[] a1=new int[2];//動態初始化元素,先分配空間

​ a1[0]=1;//給陣列元素賦值

​ a1[2]=2;

3.陣列的預設初始化

​ 陣列是引用型別,他的元素相當於類的例項變數,因此陣列一經分配空間,其中的每個元素也被按照例項變數同樣的方式被隱式初始化

​ 例項:int a2[]=new int[2];//預設值0,0

​ boolean[] b=new boolean[2];//預設值 false,false

​ String[] s=new String[2];//預設值null

public class Demo02 {
    public static void main(String[] args) {
        //陣列的初始化方式
        //1.靜態初始化
        int[] a = {10,20,30,40,50};
        //建立之後a不可改變
        System.out.println(a[2]);
        //2.動態初始化
        int[] b = new int[3];
        b[0] = 10;
        b[1] = 20;
        b[2] = 30;
        System.out.println(b[2]);

        //3.陣列的預設初始化
        int a2[]=new int[2];//預設值0,0

        boolean[] b2=new boolean[2];//預設值 false,false

        String[] s=new String[2];//預設值null

    }

}

陣列的特性

  1. 其長度是確定的。陣列一旦被建立,它的大小就是不可以改變的。其元素必須是相同型別,不允許出現混合型別。
  2. 陣列中的元素可以是任何資料型別,包括基本型別和引用型別。
  3. 陣列變數屬引用型別,陣列也可以看成是物件,陣列中的每個元素相當於該物件的成員變數。
  4. 陣列本身就是物件,Java中物件是在堆中的,因此陣列無論儲存原始型別還是其他物件型別,陣列物件本身是在堆中的。

陣列的使用

public class Demo03 {
    public static void main(String[] args) {
        //陣列的基本使用

        //靜態定義一個數組
        int[] a = {10,30,50,64,21,35};

        //輸出所有值
        //for迴圈輸出
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
        System.out.println("==============");
        //增強型迴圈輸出
        for (int x:a){
            System.out.println(x);
        }
        System.out.println("==============");

        //計算陣列中所有元素的和
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
        }
        System.out.println("sum="+sum);
        System.out.println("==============");

        //輸出陣列中的最大值
        int max = a[0];

        for (int i = 0; i < a.length; i++) {
            if(a[i] > max){
                max = a[i];
            }
        }
        System.out.println("陣列元素的最大值為:"+max);
    }
}

public class Demo04 {
    public static void main(String[] args) {
        int[] a  = {10,21,12,65,85} ;
        printArray(a);
        int[] ints = returnArray(a);
        System.out.println();
        printArray(ints);
    }
    //列印陣列所有元素
    public static void printArray(int[] array){
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+"  ");
        }

    }
    //將陣列反轉
    public static int[] returnArray(int[] array){
        int[] result = new int[array.length];//定義一個數組,長度和需要反轉的陣列一樣的
        for (int i = 0,j=result.length-1; i < array.length; i++,j--) {
            result[j] = array[i];
        }
        return result;//最終返回這個陣列
    }

}

二維陣列

public class Demo05 {
    public static void main(String[] args) {
        int [][] ar = {{4,5,6,8},{2,3,5,8},{1,6,9,5}};

        System.out.println(ar.length);//輸出行數
        System.out.println(ar[0].length);//輸出列數

        //按照行列輸出二維陣列
        /*
        4   5   6   8
        2   3   5   8   
        1   6   9   5

         */
       for (int i = 0;i < ar.length;i++){
           for(int j = 0;j<ar[i].length;j++){
               System.out.print(ar[i][j]+"   ");
           }
           System.out.println();
       }

    }
}

Arrays類

陣列的工具類java.util.Arrays

由於陣列物件本身並沒有什麼方法可以供我們呼叫,但API中提供了一個工具類Arrays供我們使用,從而可以對資料物件進行一些基本的操作。

檢視JDK幫助文件,Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行呼叫,而"不用"使用物件來呼叫

(注意:是"不用”而不是"不能")

具有以下常用功能:

  1. 給陣列賦值:通過fill方法。
  2. 對陣列排序:通過sort方法,按升序。
  3. 比較陣列:通過equals方法比較陣列中元素值是否相等。
  4. 查詢陣列元素:通過binarySearch方法能對排序好的陣列進行二分查詢法操作。
import java.util.Arrays;

public class demo06 {
    public static void main(String[] args) {
        int [] nums = {10,30,8,52,21};
        Arrays.sort(nums);
        System.out.println("------升序-----");
        for (int num : nums) {
            System.out.print(num+"");
        }

        System.out.println("\n------降序-----");
        for (int i = nums.length-1; i >=0 ; i--) {
            System.out.print(nums[i]+"");
        }

        System.out.println("\n------字串排序-----");
        String [] mm = {"n","1","6","M","a","5"};
        Arrays.sort(mm);
        for (String s : mm) {
            System.out.print(s);
        }

        System.out.println("\n------判斷兩個陣列是否相等-----");
        int [ ] num1 = {1,2,3};
        int [ ] num2 = {1,2,4};
        boolean b = Arrays.equals(num1, num2);
        System.out.print(b);

        System.out.println("\n------轉換為字串-----");
        int [] num3 = {5,6,4,5,8};
        String s = Arrays.toString(num3);
        System.out.print(s);

        System.out.println("\n------賦值相同數值-----");
        int [ ] num4 = {1,2,4};
        Arrays.fill(num4,66);
        for (int i : num4) {
            System.out.print(i+" ");
        }

        System.out.println("\n------複製為新陣列-----");
        int [ ] num5 = {1,2,4};
        int[] num55 = Arrays.copyOf(num5, 5);
        for (int i : num55) {
            System.out.print(i);
        }

        System.out.println("\n------查詢元素下標-----");
        int [ ] num6 = {1,2,4};
        int i = Arrays.binarySearch(num6, 4);
        System.out.println(i);
    }
}