Java数组

小陈java日记發表於2024-03-03

Java陣列

一、什麼是陣列

  • 陣列是相同型別資料的有序集合。
  • 陣列描述的是相同型別的若干個資料,按照一定的先後次序排列組合而成。
  • 其中,每一個資料稱作一個陣列元素,每個陣列元素可以透過一個下標來訪問它們。【陣列下標從0開始】

二、陣列宣告建立

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

    dataType[] arrayRefVar;  //首選的方法
    或者
    dataType arrayRefVar[];  //效果相同單但不是首選的方法   
    public class ArrayDemo01 {
        //變數的型別 變數的名字 = 變數的值;
        //陣列型別
        public static void main(String[] args) {
            int[] nums;//1.定義
            int nums2[];//2.定義
            /*
            兩種都可以定義陣列,為什麼第一種是首選呢?
            第一種是java中定義陣列的方式,而第二種是採用C和C++中的方式
            第二種方式完全是因為是想要早些年的C和C++程式設計師能快速適應java
            而設定的。
             */
        }
    }
    
  • Java語言使用new運算子來建立陣列,,語法如下:

    dataType[] arrayRefVar = new dataType[arraySize];
    nums = new int[10];//這裡面可以存放10個int型別的數字
    
            int[] nums;//1.宣告一個陣列
    //
            nums = new int[10];//這裡面可以存放10個int型別的數字
                               //2.建立一個陣列
            //1和2可以合併起來寫
            int[] numsw2 = new int[10];
    
    
  • 陣列的元素是透過索引訪問的,陣列索引從0開始。

  • 獲取陣列長度

    arrays.length
    

三、三種初始化及記憶體分析

一、記憶體分析

二、三種初始化狀態

  • 靜態初始化

    int[] a = {1,2,3};
    Man[] mans = {new Man(1,1),new Man(2,2)};
    
  • 動態初始化

    int[] a = new int[2];
    a[0] = 1;
    a[1] = 2;
    
  • 陣列的預設初始化

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

      public class ArrayDemos02 {
          public static void main(String[] args) {
              //靜態初始化 建立加賦值
              int[] a = {1,2,3,4,5};
              
              //Man是一個類
              Man[] man = {new Man(),new Man()};//這個陣列裡的元素全是Man物件
              
              //動態初始化:包含預設初始化
              int[] a1 = new int[2];
              a1[0] = 1;
              System.out.println(a[0]);
          }
      }
      

四、下標越界及小結

1、陣列的四個基本特點

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

2、陣列邊界

  • 下標合法區間[0 , length-1],如果越界就會報錯

    public static void main(String[] args){
        int[] a = new int[2];
        System.out.println(a[2]);
    }
    
  • ArrayIndexOutOfBoundsExceotion:陣列下標越界異常

  • 小結

    • 陣列是相同資料型別(資料型別可以為任意型別)的有序集合
    • 陣列也是物件。陣列元素相當於物件的成員變數
    • 陣列長度是確定的,不可變的。如果越界,則報:ArrayIndexOutOfBounds

五、陣列的使用

1、基本的

public class ArrayDemo03 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
        //列印全部的陣列元素
        for (int i = 0; i < arrays.length; i++){
            System.out.println(arrays[i]);
        }
        System.out.println("++++======");
        //計算所有元素的總和
        int sum = 0;
        for (int i = 0; i < arrays.length; i++){
            sum += arrays[i];
        }
        System.out.println("sum="+sum);
        System.out.println("+==========");
        //查詢最大元素
        int max = arrays[0];
        for (int i = 1; i < arrays.length; i++){
            if(max < arrays[i]){
                max = arrays[i];
            }
        }
        System.out.println("max="+max);
    }
}

2、進階的

public class ArrayDemo04 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
        //JDK1.5沒有下標
//        for (int array : arrays) {
//            System.out.println(array);
//        }
        //printArray(arrays);
        printArray(reverse(arrays));
    }
    //列印陣列元素方法
    //陣列可以當作引數
    public static void printArray(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+"\t");
        }
    }
    //反轉陣列
    //陣列作為返回值的情況
    public static int[] reverse(int[] arrays){
        int[] result = new int[arrays.length];

        for (int i = 0,j = result.length-1; i < result.length; i++,j--) {
            result[j] = arrays[i];
        }
        return result;
    }
}

六、多維陣列

  • 多維陣列可以看成是陣列組成的陣列,比如二維陣列就是一個特殊的一維陣列,其中每一個元素都是一個一維陣列

  • 二維陣列

    intr a[][] = new int[2][5]//這定義了一個2行5列的陣列
        
        public class ArrayDemo05 {
        public static void main(String[] args) {
            //4行2列
            /*
                1,2     array[0]
                2,3     array[1]
                3,4     array[2]
                4,5     array[3]
             */
    
            int[][] array = {{1,2},{2,3},{3,4},{4,5}};
            for (int i = 0; i < array.length ; i++) {
                for (int j = 0; j < array[i].length; j++) {
                    System.out.println(array[i][j]);
                }
    
            }
        }
    }
    
    
  • 解析:以上二維陣列a可以看成一個兩行五列的陣列

七、Arrays類

  • 陣列的工具類java.util.Arrays

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

  • 檢視JDK文件

  • Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行呼叫,而“不用”使用物件來呼叫(注意:是“不用”而不是“不能”)

  • 具有以下常用功能:

    • 給陣列賦值:透過 fill 方法。

    • 對陣列排序:透過 sort 方法,按升序。

    • 比較陣列:透過 equals 方法比較陣列中元素值是否相等。

    • 查詢陣列元素:透過 binarySearch 方法能對排序好的陣列進行二分查詢法操作。

      import java.util.Arrays;
      
      public class ArrayDemo06 {
          public static void main(String[] args) {
              int[] a = {2,43,3,25,456,57768,789,45};
              //列印陣列元素Arrays.toString
              System.out.println(Arrays.toString(a));
              printArray(a);
      
              //升序排序
              Arrays.sort(a);
              System.out.println(Arrays.toString(a));
      
              //填充
              Arrays.fill(a,0);
              System.out.println(Arrays.toString(a));
      
              //將第二個元素到第四個元素填充為1,注意這裡是左閉右開即[2,4);
              Arrays.fill(a,2,4,1);
              System.out.println(Arrays.toString(a));
          }
          public static void printArray(int[] a){
              for (int i = 0; i < a.length; i++) {
                  if (i == 0){
                      System.out.print("[");
                  }
                  if (i == a.length-1){
                      System.out.println(a[i]+"]");
                  }else {
                      System.out.print(a[i] + ", ");
                  }
                  }
          }
      }
      
      

八、氣泡排序(總共有八大排序)

  • 氣泡排序程式碼非常簡單,兩層迴圈,外層冒泡輪數,裡層依次比較。

九、稍後會補八大排序的專題

相關文章