稀疏数组

稀疏数组

稀疏数组的使用范围

当一个数组中大部分元素为0或者为同一值的数组时,可以使用稀疏数组来保存该数组

稀疏数组的处理方式

  • 记录数组有几行几列,有多少个不同值
  • 把具有不同值得数组和行列值记录在一个小规模的数组中从而来降低数组规模

代码实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
public class arry02 {
public static void main(String[] args) {
int [][] array1;
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();

}
//转换为稀疏数组保存
//获取有效值的个数
int sum = 0;
for(int i = 0; i < 11; i++){
for(int j = 0; j < 11; j++){
if(array1[i][j] != 0){
sum++;
}
}
}
int [][] array2;
array2 = new int [sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
int count = 0;
//遍历二维数组,将非0值定义在稀疏数组中
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {

if (array1[i][j] != 0){

count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j] ;


}

}

}
//稀疏数组的输出
System.out.println("稀疏数组的输出");
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0]+"\t"
+array2[i][1]+"\t"
+array2[i][2]+"\t");

}
//稀疏数组的还原
System.out.println("=======================================");
System.out.println("稀疏数组的还原");
//1.读取稀疏数组的值
int [][] array3;
//这是在还原,通过稀疏数组array2[0][0]代表还原后的行数,array2[0][1]代表还原后的列数
array3 = new int [array2[0][0]][array2[0][1]];
//2.给其中的元素还原值
for (int i = 1; i < array2.length; i++) {
array3[array2[i][0]][array2[i][1]] = array2[i][2];

}
//3.打印
for (int [] ints : array3) {
for (int anInt: ints) {
System.out.print(anInt+"\t");

}
System.out.println();


}





}

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
打印原始数组
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
稀疏数组的输出
11 11 2
1 2 1
2 3 2
=======================================
稀疏数组的还原
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

Process finished with exit code 0

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信