陣列

陣列是是多個相同型別資料按一定順序排列的集合,並使用一個名字命名,並通過編號的方式對這些資料進行統一管理。

  • 陣列本身是引用資料型別,既可以儲存基本資料型別,也可以儲存引用資料型別。它的元素相當於類的成員變數。
  • 建立陣列物件會在記憶體中開闢一整塊連續的空間,而陣列名中引用的是這塊連續空間的首地址。
  • 陣列的長度一旦確定,就不能修改。
  • 通過下標(或索引)的方式呼叫指定位置的元素。
  • 陣列的分類:
    按照維度:一維陣列、二維陣列、三維陣列、…
    按照元素的資料型別分:基本資料型別元素的陣列、引用資料型別元素的陣列(即物件陣列)

從六方面理解陣列:

  1. 一維(二維)陣列的宣告和初始化
  2. 如何呼叫陣列指定位置的元素
  3. 如何獲取陣列的長度
  4. 如何遍歷陣列
  5. 陣列元素的預設初始化值
  6. 陣列的記憶體解析

一維陣列的使用


格式:type var[] 或 type[] var

1 //靜態初始化:陣列的初始化與陣列元素的賦值同時進行
2 int[] num = new int[]{1,2,3,4,5};
3 //動態初始化:陣列的初始化與陣列元素的賦值分開進行
4 String[] names = new String[5];
5 name[0] = "11";

**陣列一旦初始化完成,陣列的長度就確定了。

每個陣列都有一個屬性length指明它的長度,例如陣列a: a.length指明陣列a的長度(元素個數)

陣列的預設初始化值


對於基本資料型別:預設初始化值各有不同

對於引用資料型別:預設初始化值為null(注意:於0不同)

/*從鍵盤讀入學生成績,找出最高分,
並輸出學生成績等級。
成績>=最高分-10 等級為’A’
成績>=最高分-20 等級為’B’
成績>=最高分-30 等級為’C’
其餘 等級為’D’
提示:先讀入學生人數,根據人數建立int陣列,
存放學生成績。*/ import java.util.Scanner;//在最上面 public class ArrayTest1 {
public static void main(String[] args) {
//呼叫Scanner輸入學生的成績
Scanner scan = new Scanner(System.in);
System.out.println("請輸入學生的人數:");
int number = scan.nextInt(); //建立陣列,儲存學生的成績。動態初始化
int[] score = new int[number];
int maxscore = 0;
//將學生的成績賦值給陣列
System.out.println("請輸入"+ number +"個學生成績");
for(int i=0 ; i<score.length ; i++){
score[i] = scan.nextInt();
//直接在遍歷賦值時進行最大值的計算
if(maxscore <= score[i]){
maxscore = score[i];
}
} //獲取陣列中的最大值
/*int maxscore = 0;
for(int i=0;i<score.length;i++){
if(maxscore < score[i]){
maxscore = score[i];
}
}*/ //遍歷陣列,計算學生的成績,並且輸出等級
char level;
for(int i=0;i<score.length;i++){
if(maxscore - score[i] <=10){
level = 'A';
}else if(maxscore - score[i] <=20){
level = 'B';
}else if(maxscore - score[i] <=30){
level = 'C';
}else{
level = 'D';
} System.out.println("student" + i +"score is"+score[i]+"grade is "+level);
}
} }

多維陣列的使用(二維)


 1 //都是正確的
2 int[][] arr = new int[][]{{1,2},{2,3,4},{4,5,6}};
3
4 int[] arr1[] = new int[][]{{1,2},{2,3,4},{4,5,6}};
5
6 int arr2[][] = new int[][]{{1,2},{2,3,4},{4,5,6}};
7
8 int[][] arr3 = {{1,2},{2,3,4},{4,5,6}};//型別推斷
9
10 int[][] arr4;
11 arr4 = {{1,2},{2,3,4},{4,5,6}};//錯誤的,無法識別陣列的型別

陣列的長度:

遍歷二維陣列(雙層for迴圈)

for(int i = 0 ; i<arr.length ; i++) {
for(j = 0 ; j<arr[i].length ; j++) {
System.out.print(arr[i][j]+"");
}
      System.out.println();

}

二維陣列的使用

規定:二維陣列分為外層陣列的元素,內層陣列的元素

int[][] arr = new int[4][3];
//外層元素:arr[0] 、arr[1]等
//內層元素:arr[0][0]等 //陣列的預設值
int[][] arr = new int[4][3];
System.out.println(arr[0]);//輸出地址值,外層元素的初始化值,就是地址值
System.out.println(arr[0][1]);//0,記憶體元素的初始化值,與一維陣列相同 int[][] arr = new int[4][];
System.out.println(arr[0]);
//無論是什麼型別的二維陣列,後面一個沒有數值,都輸出null
System.out.println(arr[0][1]);//報錯

二維陣列的記憶體解析

資料的儲存結構:

線性表(一對一):順序表(例如:陣列)、連結串列、棧、佇列

樹形結構(一對多):二叉樹

圖形結構(多對多)

宣告:int[] x,y[]; 在給x,y變數賦值以後,以下選項允許通過編譯的是:
int[] x,y[];相當於 int[] x;與 int[] y[]; a ) x[0] = y; no //x是一維的,y是二維的,x[0]就是int型的一個數
b) y[0] = x; yes
c) y[0][0] = x; no
d) x[0][0] = y; no
e) y[0][0] = x[0]; yes
f) x = y; no