1. 程式人生 > >Java 從入門到進階之路(五)

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

之前的文章我們介紹了 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 }

&n