2018-04-25
不悔夢歸處,只恨未盡心
?
數組
?
一、一維數組
?
?
- 數組的含義:具有相同類型的多個變量按有序形式組織起來的數據形式。(數組是用來存儲固定大小的同類型元素。)
- 數組的定義:
方式1(推薦使用):數組元素類型[] 數組名稱; 如:int[] ages; (可以把 int[] 看成一個整體,看成一種數據類型,int類型的數組)
方式2:數組元素類型 數組名稱[]; 如:int ages[];
數組必須初始化才能使用,因為初始化表示在內存存中分配空間。
?
3.數組的初始化:
數組是定長的:一旦初始化完成,數組的長度(數組元素個數)就固定了,不能改變。如果需要更改,只能重新初始化。
?
?
-
- 靜態初始化
由程序員為每一個數組元素設置初始值,而數組的長度由系統自動分配
語法:數組元素類型[] 數組名 = new?數組元素類型[]{元素1,元素2,元素3,...}; new關鍵字:在堆空間開辟一塊內存區域,用來存儲數據。
舉例:int[] num = new int[]{1,3,5,7,9};
簡單寫法(必須申明的同時并初始化,不能先聲明后初始化):int[] num = {1,3,5,7,9};
- 動態初始化
由程序員設置數組元素個數(數組長度),而每一個數組元素的初始值由系統決定。
語法:數組元素類型[] 數組名 =?new?數組元素類型[length];
舉例:int[] num = new int[100];
?
4.靜態初始化內存分析
?
5.動態初始化內存分析
?
6.數組的基本操作
-
- 獲取數組元素
- 獲取數組元素
元素類型 變量 = 數組名[index]; index表示索引
-
- 設置元素
數組名[index] = 值;
-
- 遍歷數組
建議使用for循環遍歷
-
- 數組長度
int num = 數組名.length; ?(length是屬性,不是方法)
- 索引范圍
[0,length-1] 從0開始,逐一遞增
?
數組基本操作的代碼:
1 //數組的基本操作 2 3 class ArrayDemo 4 { 5 public static void main(String[] args){ 6 7 int[] num1 = new int[]{1,3,5,7,9}; 8 9 System.out.println("數組的長度=" + num1.length); 10 System.out.println("數組第一個元素=" + num1[0]);//獲取數組元素 11 12 //修改(設置)num1數組的第一個元素 13 num1[0] = 100; 14 System.out.println("數組第一個元素=" + num1[0]);//獲取數組元素 15 16 System.out.println("----------------------------"); 17 18 //遍歷數組 19 System.out.println("數組第一個元素=" + num1[0]); 20 System.out.println("數組第二個元素=" + num1[1]); 21 System.out.println("數組第三個元素=" + num1[2]); 22 System.out.println("數組第四個元素=" + num1[3]); 23 System.out.println("數組第五個元素=" + num1[4]); 24 25 System.out.println("----------------------------"); 26 27 //使用for循環遍歷數組 28 for(int index = 0; index < num1.length; index++){ 29 System.out.println(num1[index]); 30 } 31 } 32 }
?
輸出結果:
7.?操作數組常見異常
-
- NullPointerException:空指針異常(空引用異常)
當數組沒有初始化,就直接操作數組,就會出現空指針異常
如: int[] bs = null;
System.out.println(bs.length); ?
-
- ArrayIndexOutOfBoundsException:數組的索引越界異常
如: int[] a?= {100};
System.out.println(a[-1]);
?
8.獲取數組最大和最小元素
輸出結果:10
1 class ArrayDemo2 2 { 3 4 //獲取數組最大元素 5 public static int getMax(int[] num){ 6 int max = num[0];//假設第一個元素是最大值 7 for(int index = 1; index < num.length; index++){ 8 if(num[index] > max){ 9 max = num[index]; //把最大值存儲在max變量里 10 } 11 } 12 return max; 13 14 } 15 16 public static void main(String[] args) 17 { 18 19 int[] num = new int[]{-3,0,2,1,10}; 20 21 int max = ArrayDemo2.getMax(num); 22 System.out.println(max); 23 } 24 }
?
9.按格式打印數組元素
?
1 class ArrayDemo2 2 { 3 4 5 6 public static void main(String[] args) 7 { 8 9 10 String[] arr = {"A","B","C","D","E"}; 11 ArrayDemo2.printArrary(arr); 12 } 13 static void printArrary(String[] arr){ 14 //如果數組為空,則輸出null 15 if(arr == null){ 16 System.out.println("null"); 17 return; //結束方法 18 } 19 20 String ret = "["; 21 //遍歷數組 22 for(int index = 0; index < arr.length; index++){ 23 ret = ret + arr[index]; 24 //如果當前index不是最后一個索引,則拼接“,” 25 if(index != arr.length-1){ 26 ret = ret + ", "; 27 } 28 } 29 ret = ret + "]"; 30 31 System.out.println(ret); 32 } 33 }
?
?
輸出結果:
?
10.逆序排列數組元素
?
1 class ArrayDemo2 2 { 3 4 public static void main(String[] args) 5 { 6 String[] arr = {"A","B","C","D","E"}; 7 ArrayDemo2.printArrary(arr); 8 String[] newArr = ArrayDemo2.reverse(arr); 9 ArrayDemo2.printArrary(newArr); 10 } 11 static void printArrary(String[] arr){ 12 //如果數組為空,則輸出null 13 if(arr == null){ 14 System.out.println("null"); 15 return; //結束方法 16 } 17 18 String ret = "["; 19 //遍歷數組 20 for(int index = 0; index < arr.length; index++){ 21 ret = ret + arr[index]; 22 //如果當前index不是最后一個索引,則拼接“,” 23 if(index != arr.length-1){ 24 ret = ret + ", "; 25 } 26 } 27 ret = ret + "]"; 28 29 System.out.println(ret); 30 } 31 32 static String[] reverse(String[] oldArr){ 33 34 //創建一個新數組,用來存放就數組逆序之后的元素 35 String[] newArr = new String[oldArr.length]; 36 for(int index = oldArr.length-1; index >= 0; index--){ 37 newArr[oldArr.length-1-index] = oldArr[index]; 38 } 39 return newArr; 40 } 41 }
?
?輸出結果:
?
?
? 11.元素出現索引(線性搜索)
?
class ArraySearchDemo {public static void main(String[] args) {int[] arr = {10,20,30,10,50,-30,10};int beginIndex = ArraySearchDemo.indexOf(arr,10);System.out.println(beginIndex);int endIndex = ArraySearchDemo.lastIndexOf(arr,10);System.out.println(endIndex);}/*查詢key元素在arr數組中第一次出現的位置參數:arr:從哪一個數組中去做查詢key:當前去查詢的元素返回:如果key存在于arr數組中,則返回第一次出現的索引如果key不存在于arr數組中,則返回-1*/static int indexOf(int[] arr,int key){for(int index = 0; index < arr.length; index++){if(arr[index] == key){return index;}}return -1;}//獲取key參數在arr數組中最后出現的索引位置static int lastIndexOf(int[] arr,int key){for(int index = arr.length-1; index >= 0; index--){if(arr[index] == key){return index;}}return -1;} }
?
?
?
?
輸出結果:
?
?
?
?
?