151e6dc8c7d7a731942a1392ba68abd8.png

1 數組也是一種類型

  • Java中要求所有的數組元素具有相同的數據類型。因此在一個數組中,數組元素的類型是唯一的,不能存儲多種類型的數據。
  • 一旦數組的初始化完成,數組在內存中所佔的空間將被固定下來,因此數組的長度不可以被改變。即使某個數組元素的數據被清空,他佔的空間依然被保留,依然屬於該數組,數組的長度依然不變。
  • Java的數組既可以存儲基本類型的數據,也可以存儲引用類型的數據,只要所有的數組元素具備相同的類型即可。
  • 值得指出的是,數組也是一種數據類型,是引用類型。所以可以把數組作為數組的元素,也就構成了二維數組

2 定義一個數組

數組的定義可以採用兩種方法,推薦採用第一種,這樣變量的類型是數組這一概念更加直接。

(1) type[] arrayName;
(2) type arrayName[];

數組是一個引用類型的變量,因此使用它定義一個變量時,僅僅表示定義了一個引用變量(也就是定義了一個指針),這個引用變量還未指向任何有效的內存,因此定義數組時並沒有指定數組的長度,這個應用變量並沒有指向任何有效的內存空間,所以還不能被使用,需要對其初始化。

3 初始化數組

注意,不要在進行初始化時,既指定數組的長度為每個數組元素分配初始值。 一般採用下列方法中的一種。

3.1 靜態初始化

初始化時由程序員顯示指定每個數組元素的初始值,由系統決定數組長度。

arrayName 
  • 此處的type必須與定義數組變量時所用的type相同,也可以是定義時的type的子類
  • 執行靜態初始化時,顯示指定的數組元素值的類型必須與new關鍵字後面的type類型相同,或者時其子類的實例。

3.2 動態初始化

初始化時程序員只指定數組長度,由系統為數組元素分配初始值。

arrayName 

3.3 更簡潔的方法

如果我們在定義的時候就對數組進行靜態初始化,可以用一種更簡潔的方法。

type

4 遍歷數組

Java為數組提供了一個更簡單的循環,foreach循環。這種循環會自動遍歷數組和集合,更加簡潔。使用foreach時無需獲得數組和集合的長度,無需根據指引訪問數組元素和集合元素。語法:

for

variableName 是一個形參名,foreach 會自動將數組元素依次賦給該變量。冒號後面寫數組名或集合名

foreach 方法不能修改原數組的值,只能讀取,因為我們在語句裏面直接訪問的是形參,而不是數組本身,foreach 會自動將數組的值賦給形參供我們提取。

5 深入數組(內存)

在這裏我們假設定義的是 int[] 類型。

  • 在我們定義一個數組變量的時候,系統會在棧內存存放一個變量,這個變量的類型是引用類型,這個變量的值為 null ,並不指向任何有效的內存空間。

2af9d073c3bd1a6fea984683a3450353.png
  • 接着我們用 new 關鍵字為其創建了一個 int[] 類型的對象,這個對象存放在系統的堆內存中,在用“=”將其賦給變量的時候,實際上是將堆內存裏對象的地址賦給了變量,這時候就可以通過”arrayName[index]“的方式訪問數組的值。這裏假設數組長度是5。

2419bf4f2013b21d13e3352e03501ddd.png
  • 假設我們再創建一個數組變量 array2,並將 arrayName 賦給它,這時候 array2 接受到的實際是 arrayName 變量存儲的地址,所以這兩個變量將指向同一個數組。若我們把 1 賦給array2[0],這時候我們打印 arrayName[0] 的時候會發現,它的值也是1,這是因為它們指向的是同一個內存中存儲的值。

edbe1eb00a13893e5cd823ef5aebbc83.png

6 數組常用方法

6.1 插入算法

一個數組有序,添加一個元素後,數組依然有序。

public 

6.2 刪除算法

從數組中刪除一個數據,繼續保持有序排列

public 

6.3 冒泡排序法

將無序數組按順序排列

public