天天看點

(三)數組

一節 數組定義和通路

容器概述

案例分析:現在需要統計某公司員工的工資情況,例如計算平均工資、找到最高工資等。假設該公司有50名員工,用前面所學的知識,程式首先需要聲明50個變量來分别記住每位員工的工資,然後在進行操作,這樣做會顯得很麻煩,而且錯誤率也會很高。是以我們可以使用容器進行操作。将所有的資料全部存儲到一個容器中,統一操作。

容器:是将多個資料存儲到一起,每個資料稱為該容器的元素。

生活中的容器:水杯,衣櫃,教室

1.1 數組

數組概念: 數組就是存儲資料長度固定的容器,保證多個資料的資料類型要一緻。

數組的定義

方式一

數組定義格式詳解:

數組存儲的資料類型: 建立的數組容器可以存儲什麼資料類型。

[] : 表示數組。

數組名字:為定義的數組起個變量名,滿足辨別符規範,可以使用名字操作數組。

new:關鍵字,建立數組使用的關鍵字。

[長度]:數組的長度,表示數組容器中可以存儲多少個元素。

注意:數組有定長特性,長度一旦指定,不可更改。和水杯道理相同,買了一個2升的水杯,總容量就是2升,不能多也不能少。

舉例:

定義可以存儲3個整數的數組容器,代碼如下:

方式二

舉例:定義存儲1,2,3,4,5整數的數組容器。

方式三

舉例:定義存儲1,2,3,4,5整數的數組容器

 1.2 數組的通路

索引: 每一個存儲到數組的元素,都會自動的擁有一個編号,從0開始,這個自動編号稱為數組索引(index),可以通過數組的索引通路到數組中的元素。

數組的長度屬性: 每個數組都具有長度,而且是固定的,Java中賦予了數組的一個屬性,可以擷取到數組的長度,

語句為: 數組名.length ,屬性length的執行結果是數組的長度,int類型結果。由次可以推斷出,數組的最大索引值為 數組名.length-1 。

索引通路數組中的元素:

  數組名[索引]=數值,為數組中的元素指派

  變量=數組名[索引],擷取出數組中的元素

二節 數組原理記憶體圖

2.1 記憶體概述:

記憶體是計算機中的重要原件,臨時存儲區域,作用是運作程式。我們編寫的程式是存放在硬碟中的,在硬碟中的程式是不會運作的,必須放進記憶體中才能運作,運作完畢後會清空記憶體。

Java虛拟機要運作程式,必須要對記憶體進行空間的配置設定和管理。

2.2 Java虛拟機的記憶體劃分

為了提高運算效率,就對空間進行了不同區域的劃分,因為每一片區域都有特定的處理資料方式和記憶體管理方式。

2.3 數組在記憶體中的存儲 

一個數組記憶體圖 

以上方法執行,輸出的結果是[I@5f150435,這個是什麼呢?是數組在記憶體中的位址。new出來的内容,都是在堆記憶體中存儲的,而方法中的變量arr儲存的是數組的位址。

輸出arr[0],就會輸出arr儲存的記憶體位址中數組中0索引上的元素 

兩個數組記憶體圖 

兩個變量指向一個數組 

三節 數組的常見操作

 3.1 數組越界異常

觀察一下代碼,運作後會出現什麼結果。

建立數組,指派3個元素,數組的索引就是0,1,2,沒有3索引,是以我們不能通路數組中不存在的索引,程式運作後,将會抛出 ArrayIndexOutOfBoundsException 數組越界異常。在開發中,數組的越界異常是不能出現的,一旦出現了,就必須要修改我們編寫的代碼。

3.2 數組空指針異常

arr = null 這行代碼,意味着變量arr将不會在儲存數組的記憶體位址,也就不允許再操作數組了,是以運作的時候會抛出 NullPointerException 空指針異常。在開發中,數組的越界異常是不能出現的,一旦出現了,就必須要修改我們編寫的代碼。

 空指針異常在記憶體圖中的表現 

 3.3  數組周遊

數組周遊: 就是将數組中的每個元素分别擷取出來,就是周遊。周遊也是數組操作中的基石。

以上代碼是可以将數組中每個元素全部周遊出來,但是如果數組元素非常多,這種寫法肯定不行,是以我們需要改造成循環的寫法。數組的索引是 0 到 lenght-1 ,可以作為循環的條件出現。

3.4 數組擷取最大值元素

最大值擷取:從數組的所有元素中找出最大值。

實作思路:

  定義變量,儲存數組0索引上的元素

  周遊數組,擷取出數組中的每個元素

  将周遊到的元素和儲存數組0索引上值的變量進行比較

  如果數組元素的值大于了變量的值,變量記錄住新的值

  數組循環周遊結束,變量儲存的就是數組中的最大值

3.5 數組反轉 

數組的反轉: 數組中的元素颠倒順序,例如原始數組為1,2,3,4,5,反轉後的數組為5,4,3,2,1 

實作思想:數組最遠端的元素互換位置。

  實作反轉,就需要将數組最遠端元素位置交換

  定義兩個變量,儲存數組的最小索引和最大索引

  兩個索引上的元素交換位置

  最小索引++,最大索引--,再次交換位置

  最小索引超過了最大索引,數組反轉操作結束

四 數組作為方法參數和傳回值

4.1 數組作為方法參數

以前的方法中我們學習了方法的參數和傳回值,但是使用的都是基本資料類型。那麼作為引用類型的數組能否作為方法的參數進行傳遞呢,當然是可以的。

數組作為方法參數傳遞,傳遞的參數是數組記憶體的位址。

4.2 數組作為方法傳回值

數組作為方法的傳回值,傳回的是數組的記憶體位址

4.3 方法的參數類型差別

代碼分析

1. 分析下列程式代碼,計算輸出結果。

2. 分析下列程式代碼,計算輸出結果。

總結:方法的參數為基本類型時,傳遞的是資料值. 方法的參數為引用類型時,傳遞的是位址值.