public class SparseArrayTest {
public static void main(String[] args) {
// 定义数组的行和列
final int N = 11;
int[][] array = new int[N][N];
// 模拟数据
array[1][2] = 1;
array[2][3] = 2;
System.out.println("原始数组为:");
for (int[] row : array) {
for (int i : row) {
System.out.print(i + "\t");
}
System.out.println();
}
// 统计原始数组中有几个非0数据
int count = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (array[i][j] != 0) {
count++;
}
}
}
System.out.println("原始数组中非0的数据总共有:" + count + "个");
// 定义稀疏数组
// 稀疏数组的列是固定的3列
// 稀疏数组的第一行是固定的 第一行的第一列是原始数组的行数 第二列是原始数组的列数 第三列是原始数组中非0的个数
// 稀疏数组的行数就是固定的第一行+原始数组中非0的个数 因为每一个非0的数都是一行
int[][] sparseArray = new int[count + 1][3];
sparseArray[0][0] = N;
sparseArray[0][1] = N;
sparseArray[0][2] = count;
int num = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (array[i][j] != 0) {
num++;
sparseArray[num][0] = i;
sparseArray[num][1] = j;
sparseArray[num][2] = array[i][j];
}
}
}
System.out.println("转换后的稀疏数组为:");
for (int i = 0; i < sparseArray.length; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(sparseArray[i][j] + "\t");
}
System.out.println();
}
// 把稀疏数组写入磁盘
System.out.println("写入磁盘的数据中~~~~~~");
File file = new File("D:\\sparseArr.txt");
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
if (!file.exists()) {
file.createNewFile();
}
StringBuilder allBuilder = new StringBuilder();
for (int[] rows : sparseArray) {
StringBuilder rowBuilder = new StringBuilder();
for (int item : rows) {
rowBuilder.append(item + "\t");
}
allBuilder.append(rowBuilder + "\n");
}
bw.write(String.valueOf(allBuilder));
bw.flush();
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
// 把稀疏数组转换为之前的数组
int[][] oldArray = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++) {
oldArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
System.out.println("转换后的数组:");
for (int[] row : oldArray) {
for (int i : row) {
System.out.print(i + "\t");
}
System.out.println();
}
}
}
二维数组和稀疏数组转换
最新推荐文章于 2022-10-15 10:16:23 发布