JavaSE基礎知識(4)—數組的應用


一、數組的特點、好處及使用步驟

1、數組的好處

特點:相當於用於保存一組元素的容器
好處:
  1、提高代碼的簡潔性和擴展性,且同時開辟多個空間,提高了效率
  2、分類存儲,且空間是連續的,容易查找

2、數組的特點

1、數組存儲的是相同類型一組元素
  double[] arr = {1.6,2.3,1,2,'a'};
2、數組的定義類型可以是任意類型,包含基本類型或引用類型
  String[] arr = {"john","lucy"};
  Person[] arr;
  int[][] arr;
  Person[][] arr;
3、數組本身也屬於引用類型,內存的分配和基本類型不同

  基本類型:值和變量名都存儲在
  引用類型:值存儲在堆中,變量名存儲在棧中
    值又稱為對象,值中每個元素稱為成員
    變量名又稱為數組名或對象名或引用名

3、數組的四要素

數據類型:任意類型[]
數組名
值(對象)
★下標 :從0開始
注意:訪問某個具體的成員,需要通過:數組名[下標]的方式!

4、數組的使用步驟★

(1)數組的動態初始化

(1)聲明
  數據類型[] 數組名;或
  數據類型 數組名[];
(2)開辟空間
  數組名 = new 數據類型[長度];//長度必不可少
(3)手動賦值
  數組名[下標] = 值;
(4)使用(打印、運算、判斷等)
  System.out.println(數組名[下標]);

(2)數組的靜態初始化

(1)聲明並初始化
  數據類型[] 數組名 = new 數據類型[]{值,值,值};
  或 數據類型[] 數組名 = {值,值,值};
    int[] arr = {3,4,5,6,100};
    int[] arr2 = new int[] {3,4,5,6,100};
(2)使用
  for(int i=0;i<數組名.length;i++){
    //每一個元素表示為:數組名[i]
  }

(3)注意事項

數組的元素如果不賦值,也有默認值
  int 0
  double 0.0
  char \u0000
  boolean false
  引用類型 null
②訪問數組的元素時,下標必須在0—長度-1 的范圍內,否則報數組下標越界的異常
③數組的長度,可以通過 數組名.length表示,提高代碼的維護性
④數組的賦值和使用,往往可以通過搭配for循環一起操作
  for(int i=0;i<數組名.length;i++){
    //每一個元素表示為:數組名[i]
  }

二、數組的基本及高級使用

  功能 代碼 功能 代碼
基本使用 正序打印
for(int i=0;i<arr.length;i++){
  System.out.println(arr[i]);
}
倒序打印
for(int i=arr.length-1;i>=0;i--){
  System.out.println(arr[i]);
}
求和、求平均
int sum = 0;
for(int i=0;i<arr.length;i++){
  sum+=arr[i];
}
和:sum
平均值:sum/arr.length
查找
int index=-1;
for(int i=0;i<arr.length;i++){
  if(arr[i]==帶查找的元素){
    index = i;
    break;
  }
}
if(index==-1){//沒找到}else{找到了}
求最值
int max = arr[0];
int indexMax = 0;
int min = arr[0];
int indexMin = 0;
for(int i=1;i<arr.length;i++){
  if(arr[i]>max){
    max = arr[i];
    indexMax = i;
  }
  if(arr[i]<min){
    min = arr[i];
    indexMin = i;
  }
}
最大值:max
最小值:min
排序(冒泡)
for(int i=0;i<arr.length-1;i++){
  for(int j=0;j<arr.length-1-i;j++){
    if(arr[j]>arr[j+1]){
      int t = arr[j];
      arr[j] = arr[j+1];
      arr[j+1]=t;
  }
}
復雜使用 賦值(傳統方式=arr) 
newArr = arr;
循環賦值
①創建新數組,長度=舊數組.length
  int[] newArr = new int[arr.length];
②循環將舊數組的元素依次賦值給新數組的每個成員
  for(int i=0;i<newArr.length;i++){
    newArr[i] = arr[i];

  }
反轉(方式1)
for(int i=0;i<arr.length/2;i++){
  //交換兩個數
  arr[i] vs arr[arr.length-1-i]
}
反轉(方式2)
①創建新數組,長度=舊數組.length
  int[] newArr = new int[arr.length];
②循環賦值
  for(int i=0,j=arr.length-1;i<arr.length;i++,j--){
    newArr[i] = arr[j];
  }
③將新數組的地址賦值給舊數組
  arr = newArr;
高級使用 追加元素
假如待添加的元素:add
①創建一個新數組,長度為 arr.length+1
  int[] tempArr = new int[arr.length+1];
②循環賦值(將arr的元素依次賦值給tempArr)
  for(int i=0;i<arr.length;i++){
    tempArr[i] = arr[i];
  }
補充:前兩步可以使用
  int[] tempArr=Arrays.copyOf(arr,arr.length+1);代替
③將add添加到最后一個空位上
  tempArr[tempArr.length-1] = add;
④將tempArr的地址賦值給arr
  arr = tempArr;
插入元素
待添加的元素:add
待插入的位置:index
①創建一個新數組,長度為 arr.length+1
  int[] tempArr = new int[arr.length+1];
②循環賦值(將arr的元素依次賦值給tempArr)
  for(int i=0;i<arr.length;i++){
    tempArr[i] = arr[i];
  }
補充:前兩步可以使用
  int[] tempArr=Arrays.copyOf(arr,arr.length+1);代替
③循環后移
  for(int i=tempArr.length-1;i>index;i--){
    tempArr[i] = tempArr[i-1];
  }
④將add添加到index上
  tempArr[index] = add;
⑤將tempArr的地址賦值給arr
  arr = tempArr;
  System.out.println("插入成功!");

三、二維數組

1、理解

二維數組本身也屬於引用類型,保存的也是地址號
二維數組用於保存多個一維數組的容器,相當於多個一維數組的組合,即二維數組中的每個元素又是一個一維數組

2、數組的使用步驟

(1)動態初始化

(1)聲明
  數據類型[][] 數組名;
  或
  數據類型[] 數組名[];
  或
  數據類型 數組名[][];
(2)開辟空間
  格式一:固定列數
    數組名 = new 數據類型[行數][列數];//行數相當於二維數組的長度或一維數組的個數,列數相當於每個一維數組中的成員個數
  格式二:不固定列數
    數組名 = new 數據類型[行數][];
  前兩步可以合二為一
  語法示例:
    int[][] arr = new int[5][];
(3)賦值
  格式一:固定列數
    for(int i=0;i<數組名.length;i++){
      for(int j=0;j<數組名[i].length;j++){
        數組名[i][j] = 值;
      }
    }
  格式二:不固定列數
    for(int i=0;i<數組名.length;i++){
      數組名[i]=new 數據類型[長度];//長度不能省略!
      for(int j=0;j<數組名[i].length;j++){
        數組名[i][j] = 值;
      }
    }
(4)使用
    for(int i=0;i<數組名.length;i++){
      for(int j=0;j<數組名[i].length;j++){
        System.out.println(數組名[i][j]);
      }
    }

(2)靜態初始化

(1)聲明並初始化
  數據類型[][] 數組名 ={{值,值},{值,值,值}};或
  數據類型[][] 數組名 =new 數據類型[][]{{值,值},{值,值,值}};
(2)使用
  for(int i=0;i<數組名.length;i++){
    for(int j=0;j<數組名[i].length;j++){
      System.out.println(數組名[i][j]);
    }
  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM