1. 程式人生 > 實用技巧 >JAVA的學習日記11

JAVA的學習日記11

Java陣列的使用

For-Each迴圈:即增強for迴圈,一般用來列印陣列元素,因為沒有下標
陣列做方法入參
陣列做返回值

package com.cdoudou.Array;

public class Demo04 {
    public static void main(String[] args) {

        int[] arrays = {1,2,3,4,5};


        printArray(arrays);
        int[] result = reverse(arrays);
        for (int i : result) {
            System.out.print(i+" ");
        }

    }

    //反轉陣列
    public static int[] reverse(int[] arrays){
        int[] result = new int[arrays.length];
        for(int i = 0,j = arrays.length-1; i < arrays.length; i ++, j --){
            result[j] = arrays[i];
        }
        return result;
    }


    public static void printArray(int[] arrays){
        //列印陣列元素
        for(int i = 0; i < arrays.length; i ++){
            System.out.print(arrays[i] + " ");
        }
        System.out.println();
    }
}

多維陣列

  • 多維陣列可以看成是陣列的陣列,比如二維陣列就是一個特殊的一位陣列,其每一個元素都是一個一維陣列
  • 二維陣列
    int[][] = new int[2][5];
  • 解析:上面的二維陣列a可以看成是一個兩行五列的陣列

package com.cdoudou.Array;

public class Demo05 {
    public static void main(String[] args) {
        //二維陣列

        int[][] arrays = {{1,2}, {3,4}};

        System.out.println(arrays[0][1]);   //2
        printArray(arrays[0]);              //1、2

    }
    public static void printArray(int[] arrays){
        //列印陣列元素
        for(int i = 0; i < arrays.length; i ++){
            System.out.print(arrays[i] + " ");
        }
        System.out.println();
    }
}

Arrays 類

  • 陣列的工具類java.util.Arrays
  • 由於陣列物件本身並沒有什麼方法可以供我們呼叫,但API中提供了一個工具類Arrays供我們使用,從而可以對資料物件進行一些基本的操作。
  • 檢視JDK幫助文件
  • Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以使用類名進行呼叫,而"不用"使用物件來呼叫【是"不用"而不是"不能"】
  • 具有下面的常用功能:

給陣列賦值:通過fill方法,對陣列進行填充
給陣列排序:通過sort方法,按升序
比較陣列:通過equals方法比較陣列中元素值是否相等
查詢陣列元素:通過binarySearch方法能對排序好的陣列進行二分查詢法操作

氣泡排序

  • 氣泡排序無疑是最為出名的排序演算法之一,總共有八大排序:

詳情狂野參考以下部落格
c/c++版本
Java版本

  • 冒泡的程式碼還是比較簡單的,一共兩層迴圈,外層冒泡輪數,裡層依次比較,時間複雜度為O(n^2)

稀疏陣列

  • 因為二維陣列很多值預設為0,因此記錄了很多沒有意義的資料
  • 如何解決:稀疏陣列

稀疏陣列的介紹:

  • 當一個數組中大部分元素為0,或者為同一值得陣列時,可以使用稀疏陣列來儲存該陣列。
  • 稀疏陣列的處理方式:
    記錄陣列一共有幾行幾列,有多少個不同值
    把具有不同值得元素和行列及值記錄在一個小規模的陣列中,從而縮小程式的規模

package com.cdoudou.Array;

public class Demo07 {
    public static void main(String[] args) {
        //1.建立一個二維陣列 11 * 11    0:沒有棋子  1.黑棋    2.白棋
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;
        //輸出原始陣列
        System.out.println("原始陣列為:");

        for(int[] ins : array1){
            for(int inst : ins){
                System.out.print(inst + "\t");
            }
            System.out.println();
        }

        //轉換為稀疏陣列儲存
        //獲取有效值的個數
        int sum = 0;
        for (int i = 0; i < 11; i ++) {
            for(int j = 0; j < 11; j ++){
                if(array1[i][j] != 0){
                    sum ++;
                }
            }
        }
        System.out.println("有效的個數為:"+ sum);

        //2.建立一個稀疏陣列的陣列
        int[][] array2 = new int[sum+1][3];
        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;


        //3.遍歷二維陣列,將非零的值,存放稀疏陣列中
        int count = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1.length; j++) {
                if(array1[i][j] != 0){
                    count ++;
                    array2[i][0] = i;
                    array2[i][1] = j;
                    array2[i][2] = array1[i][j];
                }
            }
        }

        //4.輸出稀疏陣列
        System.out.println("稀疏陣列為:");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0] + "\t" + array2[i][1] + "\t" + array2[i][2] + "\t");
        }


    }
}

明天就該面向"物件"了,GoGoGo