1 public class SparseArray {
2
3 //二维数组转换稀疏数组
4 public static void TwoArrayToSparseArray(){
5 //定义原始二维数组 转换
6 int[][] originalArray=new int[11][11];
7 //模拟给二维数组存数据
8 originalArray[3][4]=1;
9 originalArray[6][7]=2;
10 //遍历二维数组 得到不同的值的个数 用于创建稀疏数组
11 int count=0;//记录不同值的个数
12 for (int[] ints : originalArray) {
13 for (int item : ints) {
14 if(item!=0){
15 count++;
16 }
17 }
18 }
19
20 //创建稀疏数组, 稀疏数组格式为 N+1行 和固定3 列
21 //第一列存原始数组的行 第二列存原始数组的列 第三列存原始数组值不同的个数
22 //稀疏数组第一行就用于存放 原始数组的行和列 和不同值的个数
23 //剩下的N行取决于不同值的个数 每一行存放 不同值的行 列 和不同的值
24 int[][] sparseArray=new int[count+1][3];
25
26 //给稀疏数组第一行赋值 原始数组的行 列和不同值的个数
27 sparseArray[0][0]=originalArray.length;
28 sparseArray[0][1]=originalArray[0].length;
29 sparseArray[0][2]=count;
30
31 //稀疏数组保存数据需要索引一行一行递增 因为第1行已经添加 所以从二行开始
32 int index=1;
33
34 //遍历原始数组 存放数据
35 for (int i = 0; i < originalArray.length; i++) {
36 for (int j = 0; j < originalArray.length; j++) {
37 if(originalArray[i][j]!=0){
38 //找到不同值 给稀疏数组赋值 第一列是原始数组行 第二列是原始数组列
39 //第三列是原始数组中不同的值 然后索引自增
40 sparseArray[index][0]=i;
41 sparseArray[index][1]=j;
42 sparseArray[index][2]=originalArray[i][j];
43 index++;
44 }
45 }
46 }
47
48 System.out.println("打印从二维数组转换完毕的稀疏数组");
49 //打印稀疏数组
50 for (int i = 0; i < sparseArray.length; i++) {
51 System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]+"\t");
52 }
53 }
54
55 //稀疏数组转换二维数组
56 public static void SparseArrayToTwoArray(){
57 //创建稀疏数组
58 int[][] sparseArray=new int[3][3];
59 //模拟数据
60 sparseArray[0][0]=11;
61 sparseArray[0][1]=11;
62 sparseArray[0][2]=2;
63 sparseArray[1][0]=3;
64 sparseArray[1][1]=4;
65 sparseArray[1][2]=1;
66 sparseArray[2][0]=6;
67 sparseArray[2][1]=7;
68 sparseArray[2][2]=2;
69
70 //创建二维数组
71 //先得到二维数组的行和列
72 int row=sparseArray[0][0];
73 int column=sparseArray[0][1];
74 int[][] originalArray=new int[row][column];
75
76 //遍历稀疏数组给二维数组赋值 因为稀疏数组第一列存的是二维数组的行列 不同值个数 遍历从1开始
77 for (int i = 1; i <= sparseArray.length-1; i++) {
78 //每一行数据的第一列为 行 第二列为列 第三列为值 根据行,列,值给二维数组赋值
79 row=sparseArray[i][0];
80 column=sparseArray[i][1];
81 originalArray[row][column]=sparseArray[i][2];
82 }
83
84 //打印二维数组
85 System.out.println("打印从稀疏数组转换完成的二维数组");
86 for (int[] ints : originalArray) {
87 for (int item : ints) {
88 System.out.print(item+"\t");
89 }
90 System.out.println();
91 }
92 }
93
94
95
96 public static void main(String[] args) {
97
98 //二维数组转换稀疏数组
99 TwoArrayToSparseArray();
100
101 //稀疏数组转换二维数组
102 SparseArrayToTwoArray();
103 }
104
105
106
107 }