天天看點

Java的稀疏數組

稀疏數組

  1. 當一個數組大部分元素為0,或者同一數值的數組時,可以用稀疏數組來儲存該數組。
 package com.wu.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[] a:array1){
             for (int b:a){
                 System.out.print(b+"\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);
         //建立一個稀疏數組
 ​
         int[][] array2 = new int[sum+1][3];
         array2[0][0] = 11;
         array2[0][1] = 11;
         array2[0][2] = sum;
 ​
         //周遊二維數組,将非0的值,存放到稀疏數組中
 ​
         int count = 0;
 ​
         for (int i = 0; i < array1.length; i++) {//循環array1的行
             for (int j = 0; j < array1[i].length; j++) {//循環array1的列
                 if (array1[i][j]!=0){//當array的  第i行   第j列不等于0時執行count++
                     count++;//array2的橫坐标(每次遇到一個不為0就+1記錄在稀疏數組中)  縱坐标是固定的
                     //稀疏數組隻有三列
                     array2[count][0] = i;//存放二維數組中不為0的下标值(i 橫坐标)數組從0開始
                     array2[count][1] = j;//存放二維數組中不為0的下标值(j 縱坐标)數組從0開始
                     array2[count][2] = array1[i][j];//将二維數組中不為0的值存放到稀疏數組中
                 }
             }
         }
 ​