稀疏数组
//稀疏数组 public class ArrayDemo05 { public static void main(String[] args) { int[][] arr = new int[11][11]; arr[1][2] = 1; arr[2][3] = 2; System.out.println("原始数组:"); for (int[] ints : arr) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); } System.out.println("========================"); int count = 0;//用来记数 for (int[] ints : arr) { for (int anInt : ints) { if (anInt != 0) { count++;//每当数组有一个值不为0,count就+1 } } } System.out.println("有效数值:" + count);//原始数组里有两个值不为0 int[][] arr2 = new int[count + 1][3];//声明一个新数组作为稀疏数组 稀疏数组 是三行三列 // 第一列(行) 第二列(列) 第三列(值) //第一行记录(统计) 一共多少行 多少列 多少个有效值 //第二行记录(位置) 第几行 第几列 哪个值 arr2[0][0] = 11; arr2[0][1] = 11; arr2[0][2] = count; int sum = 0; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { if (arr[i][j] != 0) { sum++; arr2[sum][0] = i;//i代表第几行 arr2[sum][1] = j;//j代表第几列 arr2[sum][2] = arr[i][j];//arr[i][j]代表具体的值 } } } System.out.println("稀疏数组:"); for (int[] ints : arr2) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } System.out.println("=================="); System.out.println("还原稀疏数组:"); int[][] arr3 = new int[arr2[0][0]][arr2[0][1]]; for (int i = 1; i < arr2.length; i++) { for (int j = 0; j < arr2[i].length; j++) { arr3[arr2[i][0]][arr2[i][1]] = arr2[i][j]; } } System.out.println("======================"); for (int[] ints : arr3) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } } }