1、什么是稀疏数组?
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
2、稀疏数组的处理方法是:
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
3、原始数组与稀疏数组的转换过程:
4、将原始数组转化为稀疏数组的代码实现,以及利用IO将稀疏数组存储到该项目文件夹下。
import java.io.*;
public class Test {
//首先新建一个原始数组
public static void main(String[] args) throws IOException {
int[][] rowArr = new int[11][11];
//为原始数组赋值
rowArr[1][2] = 1;
rowArr[2][3] = 1;
rowArr[4][5] = 1;
//控制器输出原始数组
// System.out.println("rowArr="+rowArr.toString()); 原来数组中的元素是不能通过这种方法输出的
for (int[] col : rowArr) {
for (int data : col) {
System.out.printf("%d\t", data); // \t是制表符
}
// System.out.print("\n");// print、printf、println之间的区别 \n是换行符
System.out.println();
}
//得到原始数组中的非0元素个数
int sum = 0;
for (int i = 0; i < rowArr.length; i++) {
for (int j = 0; j < rowArr[0].length; j++) {
if (rowArr[i][j] != 0) sum++;
}
}
int[][] sparseArr = new int[sum + 1][3];
sparseArr[0][0] = rowArr.length;
sparseArr[0][1] = rowArr[0].length;
sparseArr[0][2] = sum;
int count = 1;
for (int i = 0; i < rowArr.length; i++) {
for (int j = 0; j < rowArr[0].length; j++) {
if (rowArr[i][j] != 0) {
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = rowArr[i][j];
count++; //调试成功,找到解决办法
}
}
}
//输出稀疏数组
System.out.println();//输出一个空行
System.out.println("得到的稀疏数组为:");
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t\n", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);//这个就是格式化输出
// System.out.print(sparseArr[i][0]+sparseArr[i][1]+sparseArr[i][2]);/
}
//将稀疏数组的结果存放在.txt文件中
File file = new File(".\\sparseArr.txt");
FileWriter out = new FileWriter(file);//这一条代码经过之后,生成一个.txt文件
for (int col[]:sparseArr) {
for (int data:col) {
out.write(data+"\t");
}
out.write("\n");//用这个方法达到了换行的目的
}
out.close();
}
}