稀疏数组
什么是稀疏数组?
-
当一个数组中大部分元素为0或者为同一个值的时候,可以用稀疏数组来保存该数组。
-
其处理方式是:
-
记录数组一共有几行几列,有多少不同的值
-
把具有不同值的元素和行、列、值记录在一个小规模的数组中,从而缩小程序的规模。
-
如图:

将该数组转化为稀疏数组并输出,在将稀疏数组转化为原数组输出。
package com.cheng.array;
import java.util.Arrays;
public class ArrayDemo07 {
public static void main(String[] args) {
//创建2维数组 11行11列 12赋值1 23赋值2 有效值为1 2
int[][] array= new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
int sum = 0;//判断二维数组的有效值
System.out.println("输出原始数组:");
for (int[] ints : array) {//增强for循环输出
for (int anInt : ints) {
System.out.print(anInt+"\t");
if (anInt != 0){
sum++;
}
}
System.out.println();//换行
}
//转换为稀疏数组
int[][] array1 = new int[sum+1][3]; //先创建一个稀疏数组
array1[0][0] = 11;
array1[0][1] = 11;
array1[0][2] = sum;
int count = 0;//记录出现了第几个有效值 初始化为0 当遇见非0的就+1 也代表了在稀疏数组中的行数
//遍历二维数组 将非0的数存放到稀疏数组中
System.out.println("=======================");
System.out.println("稀疏数组如下:");
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] != 0){
count++;//出现了有效值就++
array1[count][0] = i;//记录行数
array1[count][1] = j;//记录列数
array1[count][2] = array[i][j];//记录有效值
}
}
}
for (int i = 0; i < array1.length; i++) {//输出稀疏数组
for (int j = 0; j < array1[i].length; j++) {
System.out.print(array1[i][j]+"\t");
}