稀疏数组:当一个数组大部分元素为0,或为同一个值得数值是,用稀疏数组进行保存
记录数据:第一行,总行数,总列数,不同值的个数
如:
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|3|0|0|0|0|0|0|
0|0|0|0|0|4|0|0|0|0|0|
0|0|0|0|0|0|5|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|5| //总数据有11行,11列,不同值的个数为5
1|2|1| //[1,2]位置 值为1,
2|3|2| //[2,3]位置 值为 2,如下依次类推
3|4|3|
4|5|4|
5|6|5|
代码实现:
public class SparseArr {
public static void main(String[] args) throws IOException {
int[][] oriArr = new int[11][11];
oriArr[1][2] = 1;
oriArr[2][3] = 2;
oriArr[3][4] = 3;
oriArr[4][5] = 4;
oriArr[5][6] = 5;
System.out.println("OriArr:");
print(oriArr);
int[][] arr1 = changeSparArr(oriArr);
System.out.println("SparseArr:");
print(arr1);
System.out.println("saving...");
save(arr1);
System.out.println("saved");
int[][] arr2 = changeOri(arr1);
System.out.println("changeOri:");
print(arr2);
}
/*
* 将数组转换为稀疏数组;
*/
public static int[][] changeSparArr(int[][] array) {
int row;
int col;
int value = 0;
for (int i = 0; i < array.length; i++) {
for (int i1 = 0; i1 < array.length; i1++) {
if (array[i][i1] != 0)
value++;
}
}
int[][] array1 = new int[value + 1][3];//创建数组
//填充行列数
array1[0][0] = array.length;//行
array1[0][1] = array[0].length;//列
array1[0][2] = value;//值
//填充行列信息
int k = 1;
for (int i = 0; i < array.length; i++) {
for (int i1 = 0; i1 < array.length; i1++) {
if (array[i][i1] != 0) {
array1[k][0] = i;
array1[k][1] = i1;
array1[k][2] = array[i][i1];
k++;
}
}
}
return array1;
}
/*
* 将稀疏数组还原为原数组;
*/
public static int[][] changeOri(int[][] array) {
int row;
int col;
int value;
int[][] array1 = new int[array[0][0]][array[0][1]];
//int k=1;
for (int i = 1; i < array.length; i++) {
array1[array[i][0]][array[i][1]] = array[i][2];
}
return array1;
}
/*
* 将稀疏数组保存到磁盘;
*/
public static void save(int[][] array) throws IOException {
PrintStream fw = new PrintStream("src\\DataStructure\\save.txt");
int k = 0;
for (int i = 0; i < array.length; i++) {
for (int i1 = 0; i1 < array[0].length; i1++) {
//System.out.print(array[i][i1] + "|");
fw.print(array[i][i1]+" ");
}
fw.println( );
}
fw.close();
System.out.println("文件保存到src\\DataStructure\\save.txt,保存成功");
}
/*
* 打印数组;
*/
public static void print(int[][] array) {
for (int i = 0; i < array.length; i++) {
for (int i1 = 0; i1 < array[0].length; i1++) {
System.out.print(array[i][i1] + "|");
}
System.out.println();
}
}
}