Java 從入門到進階之路(五)

  • 2019 年 10 月 3 日
  • 筆記

之前的文章我們介紹了 Java 的循環結構,本章我們來看一下 Java 的數組

數組對於每一門程式語言來說都是重要的數據結構之一,當然不同語言對數組的實現及處理也不盡相同。

數組

  - 相同數據類型的元素組成的集合

  - 元素按線性順序排列。所謂線性順序是指除第一個元素外,每一個元素都有唯一的前驅元素,除最後一個元素外,每一個元素都有唯一的後繼元素(一個跟一個)

  - 可以通過元素所在的位置的順序號(下標)做標識來訪問每一個元素(下標為0開始,最大到元素個數 -1)

創建數組

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         // 第一種:先聲明一個數組變數 arr,然後把新創建的數組的引用賦值給變數 arr   4         int[] arr;   5         arr = new int[5];   6   7         // 第二種:數組變數的聲明,和創建數組可以用一條語句完成   8         int[] arr1 = new int[5];   9     }  10 }

貼士:在 IDEA 編輯器下輸入fori 然後回車就能生成  for (int i = 0; i < ; i++) { } ,輸入 foreach 然後回車就能生成  for (:) { } 

在上面的程式碼中我們聲明了數組 arr,但是並沒有為其賦值,那麼系統將會自動為每個數組元素賦值,默認為 0,我們可以對每個元素賦值,也可以在初始化數組的時候賦值,如下程式碼:

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         // 聲明整型數組變數 arr,   4         int[] arr = new int[5];   5         for (int i = 0; i < arr.length; i++) {   6             // arr 數組默認值為 0   7             System.out.println(arr[i]); // 0 0 0 0 0   8         }   9  10         // 聲明整型數組變數 arr1,  11         int[] arr1 = new int[5];  12         arr1[0] = 0;  13         arr1[1] = 1;  14         arr1[2] = 2;  15         arr1[3] = 3;  16         arr1[4] = 4;  17         for (int i = 0; i < arr1.length; i++) {  18             // 輸出 arr1 數組值  19             System.out.println(arr1[i]); // 0 1 2 3 4  20         }  21  22         // 聲明整型數組變數 arr2,arr12 賦值 [0,1,2,3,4]  23         int[] arr2 = {0, 1, 2, 3, 4};  24         for (int i = 0; i < arr2.length; i++) {  25             // 輸出 arr2 數組值  26             System.out.println(arr2[i]); // 0 1 2 3 4  27         }  28     }  29 }

 上面的程式碼我們使用 for 循環輸出的數組每一個元素,我們還可以使用 for-each 輸出:

1 public class HelloWorld {  2     public static void main(String[] args) {  3         // 聲明整型數組變數 arr,  4         double[] arr = {0.1, 1.2, 2.3, 3, 4};  5         for(double i : arr){  6             System.out.println(i); // 0.1 1.2 2.3 3.0 4.0  7         }  8     }  9 }

我們也可以將一個數組中的元素複製到另一個數組中去,如下:

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         int[] arr1 = {0, 1, 2, 3, 4};   4         int[] arr2 = new int[5];   5         /**   6          * arr1:源數組   7          * 1:源數組起始下標   8          * arr2:目標數組   9          * 0:目標數組的起始下標  10          * 4:要複製的元素的個數  11          * */  12         System.arraycopy(arr1, 1, arr2, 0, 4);  13         for (int i = 0; i < arr2.length; i++) {  14             System.out.println(arr2[i]); // 1 2 3 4 5 0  15         }  16     }  17 }

當然複製是不能超範圍的,例如我們定義 arr2 的 length 為 3,即  int[] arr2 = new int[3]; ,那麼要複製的個數已經超過了目標數組的長度,程式就會報錯。

數組的長度在創建後是不可改變的,但是我么可以對其進行擴容,所謂擴容是指創建一個更大的新數組並將其原有數組的內容複製到其中,可以通過  Arrays.copyOf( ) 方法實現。

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         int[] arr1 = {0, 1, 2, 3, 4};   4         // arr1 源數組  arr1.length+1 擴容數組長度   5         arr1 = Arrays.copyOf(arr1, arr1.length + 1);   6         for (int i = 0; i < arr1.length; i++) {   7             System.out.println(arr1[i]); // 0 1 2 3 4 0   8         }   9  10     }  11 }

當然我們也可以歲原有數組進行減容,只需要把 擴容數組長度 小於源數組即可,那麼源數組末尾多出的元素將會被去掉。

java 為我們提供了一種簡便的數組排序的方法, Arrays.sort( ) 

 1 public class HelloWorld {   2     public static void main(String[] args) {   3         int[] arr = {1,4,5,67,23,3};   4         Arrays.sort(arr);   5         for (int i = 0; i < arr.length; i++) {   6             System.out.println(arr[i]); // 1 3 4 5 23 67   7         }   8   9     }  10 }