1. 程式人生 > >4--黑馬程式設計師--技術總結之陣列

4--黑馬程式設計師--技術總結之陣列

<span style="white-space: pre; color: rgb(68, 68, 68); font-family: 'Microsoft Yahei', 微軟雅黑, Tahoma, Arial, Helvetica, STHeiti; font-size: 14px; line-height: 21px;">                                          ----------------------<a target=_blank target="_blank" href="http://www.itheima.com/" style="color: rgb(51, 102, 153); text-decoration: none;">ASP.Net+Unity開發</a></span><span style="white-space: pre; color: rgb(68, 68, 68); font-family: 'Microsoft Yahei', 微軟雅黑, Tahoma, Arial, Helvetica, STHeiti; font-size: 14px; line-height: 21px;">、<a target=_blank target="_blank" href="http://www.itheima.com/" style="color: rgb(51, 102, 153); text-decoration: none;">.Net培訓</a></span><span style="white-space: pre; color: rgb(68, 68, 68); font-family: 'Microsoft Yahei', 微軟雅黑, Tahoma, Arial, Helvetica, STHeiti; font-size: 14px; line-height: 21px;">、期待與您交流! ----------------------</span>

一.陣列的定義

        所謂陣列,就是相同資料型別的元素按一定順序排列的集合,就是把有限個型別相同的變數用一個名字命名,然後用編號區分他們的變數的集合,這個名字成為陣列名,編號成為下標。組成陣列的各個變數成為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。陣列是在程式設計中,為了處理方便, 把具有相同型別的若干變數按有序的形式組織起來的一種形式。這些按序排列的同類資料元素的集合稱為陣列。
      陣列的示意圖:

       陣列的格式:
       一維陣列:
       陣列元素型別 陣列名字[];例如 int arr[];
       陣列元素型別[] 陣列名字;例如 int[] arr;
       二維陣列:
       陣列元素型別 陣列名字[][];例如 int arr[][];
       陣列元素型別[][] 陣列名字;例如 int[][] arr;

       注意事項:1)陣列元素的型別可以是任意一種型別,類型別也可以,比如這個陣列People china[]; 陣列china中可以存放People型別的資料。
                 2)陣列中的各元素是有先後順序的,它們在記憶體中按照這個先後順序連續存放在一起。
                 3)陣列元素用整個陣列的名字和它自己在陣列中的順序位置來表示。例如,a[0]表示名字為a的陣列中的第一個元素,a[1]代表陣列a的第二個元素,以此類推。 

二.陣列的建立

       在Java中,建立陣列的格式如下:
       格式1:陣列元素型別[] 陣列名字 = new 陣列元素型別[陣列元素的個數或陣列長度];
       例如:int[] arr = new int[10];    //動態初始化,可以隨時賦初始值
       格式2:陣列元素型別[] 陣列名字 = new 陣列元素型別[]{元素1,元素2,····元素n};
       例如:int[] arr = new int[]{1,2,3,4,5,6,7,8,9,0,};   //靜態初始化,已經賦好初始值

程式碼示例

  1. public class ArrayDemo1 {  
  2.     /**  
  3.      * 使用陣列的建立的兩種方式並列印輸出  
  4.      * @黑馬ZWF  
  5.      */  
  6.     public static void main(String[] args) {  
  7.         int[] arr1 = new int[5];  
  8.         for(int x = 0; x <arr1.length; x++) {  
  9.             System.out.println(arr1[x]);     //輸出結果為0,0,0,0,0 因為沒有賦初始值  
  10.         }  
  11.         int[] arr2 = new int[]{1,2,3,4,5,6,7,8,9,0};  
  12.         for(int x = 0; x <arr2.length; x++) {  
  13.             System.out.println(arr2[x]);    //輸出結果為1,2,3,4,5,6,7,8,9,0  
  14.         }  
  15.     }  
  16. }  

三.陣列的應用
      1)陣列的遍歷(for迴圈的另一種用法foreach)

  1. public class ArrayDemo1 {  
  2.     /**  
  3.      * 使用for迴圈的另一種方法遍歷陣列並列印輸出  
  4.      * @黑馬ZWF  
  5.      */  
  6.     public static void main(String[] args) {  
  7.         int[] arr = new int[]{1,2,3,4,5,6,7,8,9,0};  
  8.         for(int x:arr) {  
  9.             System.out.print(x);    //輸出結果為1234567890  
  10.         }  
  11.     }  
  12. }  

        2)獲取最值

  1. public class ArrayDemo2 {  
  2.     /**  
  3.      * 遍歷陣列或缺陣列的最大值並列印輸出  
  4.      * @黑馬ZWF  
  5.      */  
  6.     public static void main(String[] args) {  
  7.         int[] arr = new int[]{24,13,12,45,78,06,43};   
  8.         int temp = 0;     //定義中間變數並賦初值  
  9.         for(int x = 0; x <arr.length; x++) {  
  10.             if(arr[x] > temp) {  
  11.                 temp = arr[x];  
  12.             }  
  13.         }  
  14.         System.out.println("該陣列的最大值是" + temp); //輸出結果為:該陣列的最大值是78  
  15.     }  
  16. }  


        3)陣列排序(氣泡排序和選擇排序

  1. public class ArrayDemo3 {  
  2.     /**  
  3.      * 用冒泡法和選擇排序法實現對陣列的排序並列印輸出  
  4.      * @黑馬ZWF  
  5.      */  
  6.     public static void main(String[] args) {  
  7.         // TODO Auto-generated method stub  
  8.         int[] arr = new int[]{213,432,645,752,234,123};  
  9.         bubbleSort(arr);      //輸出結果為:123 213 234 432 645 752   
  10.         System.out.println();  
  11.         selectSort(arr);      //輸出結果為:752 645 432 234 213 123   
  12.     }  
  13.     public static void bubbleSort(int[] arr) {     //氣泡排序法  
  14.         for(int x = 0; x <arr.length - 1; x++) {     //最多進行arr.length-1次遍歷  
  15.             for(int y = 0; y <arr.length - 1 - x; y++) {  
  16.                 if (arr[y] > arr[y + 1]) {    //從小到大輸出  
  17.                     change(arr, y, y+1);  
  18.                 }  
  19.             }  
  20.         }  
  21.         printArray(arr);  
  22.     }  
  23.     public static void selectSort(int[] arr) { //選擇排序法  
  24.         for(int x = 0; x <arr.length - 1; x++) {  
  25.             for(int y = x + 1; y <arr.length; y++) {  
  26.                 if (arr[x] <arr[y]) {       //從大到小輸出  
  27.                     change(arr, x, y);  
  28.                 }  
  29.             }  
  30.         }  
  31.         printArray(arr);  
  32.     }  
  33.     public static void printArray(int[] arr) { //列印陣列  
  34.         for(int x = 0; x <arr.length; x++) {  
  35.             System.out.print(arr[x]+" ");  
  36.         }  
  37.     }  
  38.     public static void change(int[] arr, int x, int y){ //交換資料的方法  
  39.             int temp = arr[x];  
  40.             arr[x] = arr[y];  
  41.             arr[y] = temp;        
  42.     }  
  43. }  


         4)陣列的查詢

  1. public class ArrayDemo4 {  
  2.     /**  
  3.      * 在陣列中查詢指定的值並列印輸出  
  4.      * @黑馬ZWF  
  5.      */  
  6.     public static void main(String[] args) {  
  7.         // TODO Auto-generated method stub  
  8.         int[] arr = new int[]{123,324,54,6,89,634,64};  
  9.         seekNumber(arr,64);    //輸出結果是:該數字在此陣列的第7個位置  
  10.         seekNumber(arr,23);    //輸出結果是:在此陣列中沒有沒有找到該數字!  
  11.     }  
  12.     public static void seekNumber(int[] arr,int a) {  
  13.         int temp = 0;   //設定中間變數判斷是否查詢到該數字  
  14.         for(int x = 0; x <arr.length; x++) {  
  15.             if(arr[x] == a) {       //迴圈遍歷,查詢是否有目的數字  
  16.                 x++;  
  17.                 temp = x;  
  18.             }     
  19.         }  
  20.         if (temp !=0){  
  21.             System.out.println("該數字在此陣列的第" + temp + "個位置" );  
  22.         }  
  23.         else {  
  24.             System.out.println("在此陣列中沒有沒有找到該數字!");  
  25.         }  
  26.     }  
  27. }  


       5)字元陣列的應用

  1. public class ArrayDemo5{  
  2.     /**  
  3.      * 判斷一個字串是否是對稱字串  
  4.      * 例如"abc"不是對稱字串,"aba"、"abba"、"aaa"、"mnanm"是對稱字串  
  5.      * @黑馬ZWF  
  6.      */  
  7.     public static void main(String argu[]){  
  8.         String[] str = {"abc","aba","abba","aaa","mnanm"};  //定義字串陣列  
  9.         for(int i = 0; i <str.length; i++){  
  10.             System.out.println(str[i] + " is " + symmetry(str[i])); //呼叫symmetry方法判斷並輸出結果  
  11.         }  
  12.     }     
  13.     public static boolean  symmetry(String str) {   //判斷字串是否對稱的方法  
  14.         if (null == str) {     
  15.              return  false;     
  16.         }     
  17.         for (int i = 0; i <str.length() / 2; i++) {     
  18.                 if (str.charAt(i) != str.charAt(str.length() - i-1)) {     
  19.                 return false;     
  20.             }   //遍歷比較,從字串中間開始比較兩邊的字元是否相等,有不等的就不是對稱的  
  21.         }     
  22.         return true;   //遍歷比較完後,沒有不相等的字元,即為對稱字串,返回true值  
  23.     }  
  24. }  
  6)進位制轉換
  1. public class ArrayDemo6 {  
  2.     /**利用陣列儲存資料進行進位制之間的轉換  
  3.      * @黑馬ZWF
  4.      */  
  5.     public static void main(String[] args) {  
  6.         // TODO Auto-generated method stub  
  7.         toBinaryNumber(16);     //輸出結果為:10000  
  8.         toHexNumber(125);  
  9.     }  
  10.     public static void toBinaryNumber(int num) {  //十進位制轉二進位制  
  11.         StringBuffer sb = new StringBuffer();    //利用StringBuffer容器儲存資料  
  12.         while (num > 0){  
  13.             sb.append(num % 2);  
  14.             num = num / 2;  
  15.         }  
  16.         System.out.println(sb.reverse());   //將容器裡的資料反向輸出