稀疏数组
-
当一个数组中大部分元素为零,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
-
稀疏数组处理的方式是:
-
记录数组一共有几行几列,有多少个不同类型的值
-
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
-
Practice
-
需求:编写五子棋游戏,有存盘退出和续上盘的功能
-
分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据
-
解决:稀疏数组
1 package com.Xujie.Day10; 2 3 public class Java10_11 { 4 public static void main(String[] args) { 5 //1. 创建一个二维数组11*11 0:没有棋子, 1.黑棋 2.白棋 6 int[][]array1=new int[11][11]; 7 array1[1][2]=1; 8 array1[2][3]=2; 9 //输出原始的数组 10 System.out.println("输出原始的数组"); 11 12 for (int[] ints:array1) { 13 for (int anInt:ints) { 14 System.out.print(anInt+"\t"); 15 } 16 System.out.println(); 17 } 18 System.out.println("===================="); 19 //转化为稀疏数组保存 20 //1.获取有效值的个数 21 int sum=0; 22 for (int i = 0; i < 11; i++) { 23 for (int j = 0; j< 11; j++) { 24 if (array1[i][j]!=0){ 25 sum++; 26 } 27 } 28 } 29 //2.创建一个稀疏数组的数组 30 int[][]array2=new int[sum+1][3]; 31 array2[0][0]=11; 32 array2[0][1]=11; 33 array2[0][2]=sum; 34 //遍历二维数组,将非零的值,存放在二维数组中 35 int count=0; 36 for (int i = 0; i < array1.length; i++) { 37 for (int j = 0; j < array1[1].length; j++) { 38 if (array1[i][j]!=0){ 39 count++; 40 array2[count][0]=i; 41 array2[count][1]=j; 42 array2[count][2]=array1[i][j]; 43 } 44 } 45 } 46 //输出稀疏数组 47 System.out.println("稀疏数组"); 48 for (int i = 0; i < array2.length; i++) { 49 System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t"); 50 } 51 System.out.println("================="); 52 System.out.println("还原"); 53 //1. 读取稀疏数组 54 int[][]array3=new int[array2[0][0]][array2[0][1]]; 55 //2. 给其中元素还原他的值 56 for (int i = 1; i < array2.length; i++) { 57 array3[array2[i][0]][array2[i][1]]=array2[i][2]; 58 } 59 //3. 打印 60 for (int[] ints:array1) { 61 for (int anInt:ints) { 62 System.out.print(anInt+"\t"); 63 } 64 System.out.println(); 65 } 66 } 67 68 }