稀疏数组实际上就是一个压缩后的二维数组,且列数固定为3列。原二维数组中有效数组的个数为sum,则稀疏数据的行数即为sum+1。稀疏数据的第一行第一列记录原二维数组的总行数,第二列记录原二维数组的总列数,第三列记录原二维数组中有效数据的总数量。以后每一行的三列依次记录每一个有效数据所在原二维数组的行数、列数和具体的值。
public static void main(String[] args) {
//1、创建一个二位数组 11*11 0:代表没有棋子 1:代表黑子 2:代表白子
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
for (int[] ints : array) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
?
System.out.println("==================");
System.out.println("转化为稀疏数组");
// 转化为稀疏数组保存
// 获取有效数值个数
int sum = 0;
for (int[] ints : array) {
for (int anInt : ints) {
if (anInt != 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;
?
int count = 0;
for (int i = 0; i < array.length; i++) {
int[] arr = array[i];
for (int j = 0; j < arr.length; j++) {
if (arr[j] != 0) {
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = arr[j];
}
?
}
}
?
for (int[] ints : array2) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
?
System.out.println("==================");
System.out.println("还原");
?
// 1、读取稀疏数组
int[][] array3 =