Java数组04-稀疏数组
-
当数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
-
稀疏数组的处理方式:
-
记录数组一共有几行几列,有多少个不同值
-
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
-
package array;
/**
* @author IT_Jay
* @date 2022/1/21 20:10
*/
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();
}
System.out.println("========================================================");
//转换为稀疏数组
//获取有效值的个数
int s = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) { //注意此时内层for循环,array1[i].length
if (array1[i][j] != 0) {
s++;
}
}
}
System.out.println("有效值的个数为:" + s);
System.out.println("========================================================");
//2、创建一个稀疏数组
int[][] array2 = new int[s + 1][3];
//稀疏数组第一行内容(下标从0开始)
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = s;
//遍历二维数组,将非零值存入稀疏数组
int count = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) { //注意此时内层for循环,array1[i].length
if (array1[i][j] != 0){
count++;
array2[count][0]=i; //当找第一个非0元素时,count=1,则二维数组array2第2行(下标为1,从0开始)第一个元素存入非0元素的横坐标
array2[count][1]=j; //当找第一个非0元素时,count=1,则二维数组array2第2行第二个元素存入非0元素的纵坐标
array2[count][