1. 程式人生 > 其它 >Java多執行緒模擬醫院排號叫號系統

Java多執行緒模擬醫院排號叫號系統

技術標籤:java

Java中的陣列

陣列是一種最簡單的複合資料型別,它是有序資料的集合,陣列中的每個元素具有相同的資料型別,可以用一個統一的陣列名和不同的下標來來確定陣列中唯一的元素,根據陣列的維度,可以將其分為一維陣列,二維陣列和多維陣列等。

陣列具有以下三個基本特性:

  1. 一致性:陣列只能儲存相同資料型別元素,元素的資料型別可以是任何相同的資料型別。
  2. 有序性:陣列中的元素是有序的,通過下標訪問。
  3. 不可變性:陣列一旦初始化,則長度(陣列中元素的個數)不可變。

數值型陣列元素預設值為0,而引用元素的預設值為null;陣列的索引從0開始,到n-1(n為陣列的長度);陣列元素可以使任何型別,包括陣列型別;陣列型別是從抽象基類Array派生的引用型別。

注意:Java陣列的工作原理跟C/C++陣列不同,有興趣的朋友可以查閱資料進行了解。

陣列是引用資料型別,引用資料型別在使用之前一定要宣告和初始化,下面將詳細講解一維陣列的建立和初始化

建立一維陣列

宣告一維陣列的語法格式為:

type[] arrayName;	//資料型別[] 陣列名

或者

type arrayName[];	//資料型別 陣列名[]

對於以上兩種宣告語法,Java更推薦使用第一種宣告格式,因為第一種格式不僅具有更好的語義,而且具有更好的可讀性。 對於第一種格式type[] arrayName,很容易理解這是定義一個變數,其中變數名是 arrayName,而變數型別是 type[]。 但第二種格式type arrayName[]

的可讀性就差了,看起來好像定義了一個型別為 type 的變數,而變數名是 arrayName[],這與真實的含義相去甚遠。

有些朋友喜歡第二種宣告方式,可能是因為曾經看過某些早期的計算機讀物誤導,從現在開始最好不要用這種糟糕的方式了。因為當下越來越多的語言不再支援 type arrayName[]這種陣列宣告語法(比如說C#)。

以上兩種格式都可以宣告一個數組,其中資料型別既可以是基本資料型別,也可以是引用資料型別。陣列名可以是任意合法的變數名,示例:

int[] score;    // 儲存學生的成績,型別為整型
double[] price;    // 儲存商品的價格,型別為浮點型
String[
] name; // 儲存商品名稱,型別為字串型

在宣告陣列時不需要規定陣列的長度,例如:

int score[10];	//這是錯誤的

分配空間

聲明瞭陣列,只是得到了一個數組的引用變數,並沒有在堆中為陣列分配記憶體空間,不能使用。

簡單地說,分配空間就是要告訴計算機在記憶體中為它分配幾個連續的位置來儲存資料。在Java中可以使用new關鍵字來給陣列分配空間。語法格式如下:

arrayName = new type[size];    // 陣列名 = new 資料型別[陣列長度];

其中,陣列長度就是陣列中能存放的元素個數,示例:

score = new int[10];
price = new double[30];
name = new String[20];

其中的陣列名(score,price,name)是已經宣告過得陣列變數,當然也可以在宣告陣列時就給它們分配空間,語法格式如下:

type[] arrayName = new type[size];    // 資料型別[] 陣列名 = new 資料型別[陣列長度];

示例:宣告並分配一個長度為5的int型別陣列arr,程式碼如下:

intp[] arr = new int[5];

執行後arr陣列在記憶體中的格式如圖所示。

在這裡插入圖片描述

在圖中arr為陣列名稱,方括號“[]”中的值為陣列的下標。陣列通過下標來區分陣列中不同元素,並且下標是從0開始的。因此這裡包含5和元素的arr陣列最大下標為4 。

初始化陣列

Java語言中陣列必須先初始化,然後才可以使用。所謂初始化,就是為陣列的陣列元素分配記憶體空間,併為每個陣列元素賦初值。

初始化陣列有以下3種方式

1)使用 new 指定陣列大小後進行初始化

type[] arrayName = new int[size];

建立陣列之後,系統將為陣列元素分配初值。分配初始值原則如下:

  • 陣列元素的型別是基本型別中的整數型別(byte、short、int 和 long),則陣列元素的值是 0。
  • 陣列元素的型別是基本型別中的浮點型別(float、double),則陣列元素的值是 0.0。
  • 陣列元素的型別是基本型別中的字元型別(char),則陣列元素的值是‘\u0000’。
  • 陣列元素的型別是基本型別中的布林型別(boolean),則陣列元素的值是 false。
  • 陣列元素的型別是引用型別(類、介面和陣列),則陣列元素的值是 null。

也可以通過下標自己為陣列元素賦初值。

示例: 建立包含 5 個元素的 int 型別的陣列,然後分別將元素的值設定為 1、2、3、5 和 8。程式碼如下:

int[] number = new int[5];
number[0] = 1;
number[1] = 2;
number[2] = 3;
number[3] = 5;
number[4] = 8;

2)使用 new 指定陣列元素的值

可以在建立陣列的同時為陣列元素分配初值,語法如下:

type[] arrayName = new type[]{1,2,3,4,• • •,值 n};

示例:

int[] number = new int[]{1, 2, 3, 5, 8};

上述程式碼效果等價於第一個示例。

3)直接指定陣列元素的值

在上述兩種方法中,type可以省略,如果已經宣告陣列變數,那麼直接使用這兩種方式進行初始化。除此之外,還有一種方式,type不可以省略,語法如下:

type[] arrayName = {1,2,3,...,值 n};

示例:

int[] number = {1,2,3,5,8};

上述程式碼效果等價於前兩個示例。

使用這種方式時,陣列的宣告和初始化操作要同步,即不能省略陣列變數的型別。下面程式碼就是錯誤的:

int[] number;
number = {1,2,3,5,8};

獲取元素

獲取陣列元素的方法非常簡單,指定元素所在陣列的下標即可。語法如下:

arrayName[index];

其中,arrayName表示陣列變數,index表示下標,下標為0表示獲取第一個元素。當指定的下標超出陣列的總長度時,會丟擲ArrayIndexOutOfBoundsException異常。

示例: 獲取 number 陣列中的第一個元素、最後一個元素和第六個元素,並將元素的值輸出。程式碼如下:

int[] number = {1,2,3,5,8};
System.out.println("獲取第一個元素:"+number[0]);
System.out.println("獲取最後一個元素:"+number[number.length-1]);
System.out.println("獲取第6個元素:"+number[5]);

執行程式碼,輸出結果如下:

獲取第一個元素:1
獲取最後一個元素:8
java.lang.ArrayIndexOutOfBoundsException: 5

我們一共存入了 5 個值,所以下標的取值為 0~4。因為 number[5] 取出的內容超過了這個下標,所以輸出結果會提示陣列索引超出繫結異常(ArrayIndexOutOfBoundsException)。這一點是在使用陣列中是經常出現的問題,大家在編寫程式時應該引起注意。

遍歷陣列元素

獲取全部元素——使用迴圈語句。

使用for迴圈語句遍歷number陣列中的全部元素,並將元素值輸出。程式碼如下:

int[] number = {1,2,3,5,8};
for (int i=0;i<number.length;i++) {
    System.out.println("第"+(i+1)+"個元素的值是:"+number[i]);
}

除了使用for語句,還可以使用foreach遍歷陣列中的元素,並將元素的值輸出,程式碼如下:

for(int val:number) {
    System.out.print("元素的值依次是:"+val+"\t");
}