Java 稀疏陣列
阿新 • • 發佈:2021-08-02
Java 稀疏陣列
- 當一個數組中大部分元素為0,或者為同一值的陣列時,可以使用稀疏陣列來儲存該陣列。
示例:
package com.shun.array; public class ArrayDemo08 { public static void main(String[] args) { //稀疏陣列 //建立一個二維陣列 11*11的棋盤格 0:代表沒有棋子 1:黑棋 2:白棋 int[][] array1 = new int[11][11]; array1[1][2] = 1; array1[2][3] = 2; System.out.println("輸出原始的陣列"); for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); }//輸出的結果為: //0 0 0 0 0 0 0 0 0 0 0 //0 0 1 0 0 0 0 0 0 0 0 //0 0 0 2 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 System.out.println("---------------------------"); //轉化為稀疏陣列儲存 //1.先獲取有效值的個數 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[i].length; j++) { if (array1[i][j] != 0){ count++; array2[count][0] = i; array2[count][1] = j; array2[count][2] = array1[i][j]; } } } System.out.println("---------------"); //4.輸出稀疏陣列 System.out.println("稀疏陣列"); for (int[] ints : array2) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); }//輸出的結果為: //11 11 2 //1 2 1 //2 3 2 //還原稀疏陣列 //1.建立陣列 int[][] array3 =new int[array2[0][0]][array2[0][1]]; //從稀疏陣列中獲取非零的元素,並還原值 for (int i = 1; i < array2.length; i++) { array3[array2[i][0]][array2[i][1]] = array2[i][2]; } //列印值 System.out.println("------------------"); System.out.println("輸出還原陣列:"); for (int[] ints : array3) { for (int anInt : ints) { System.out.print(anInt +"\t"); } System.out.println(); }//輸出的結果為: //0 0 0 0 0 0 0 0 0 0 0 //0 0 1 0 0 0 0 0 0 0 0 //0 0 0 2 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 //0 0 0 0 0 0 0 0 0 0 0 } }