稀疏数组
1.二维数组转成稀疏数组
// 将二维数组转成稀疏数组
// 1.得到非零个数sum
int sum = 0;
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray.length; j++) {
if (chessArray[i][j] != 0)
sum++;
}
}
// 2.创建稀疏数组行数sum+1,列数固定,行数、列数和有效值
int[][] sparsArr = new int[sum + 1][3];
// 第一行记录二维数组的行数、列数和有效值个数
sparsArr[0][0] = 11;
sparsArr[0][1] = 11;
sparsArr[0][2] = sum;
// 用于记录是第几个非零数据
int count = 0;
// 遍历二维数组,将非零值存放到sparseArr中
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray.length; j++) {
if (chessArray[i][j] != 0) {
count++;
sparsArr[count][0] = i;
sparsArr[count][1] = j;
sparsArr[count][2] = chessArray[i][j];
}
}
}
System.out.println("稀疏数组为~~~~");
for (int i = 0; i < sparsArr.length; i++) {
System.out.printf("%d\t%d\t%d\t\n", sparsArr[i][0], sparsArr[i][1], sparsArr[i][2]);
}
2.将稀疏数组保存的本地
public static void saveSparseArrToFile(int[][] sparse, String filepath) throws Exception {
// 写入文件
FileOutputStream fos = new FileOutputStream(filepath);
DataOutputStream dos = new DataOutputStream(fos);
for (int[] row : sparse) {
for (int data : row) {
dos.writeInt(data);
}
}
if (dos != null)
dos.close();
if (fos != null)
fos.close();
}
3.将本地文件数据读取到稀疏数组中
public static int[][] getSparseArrFromFile(String filePath) throws Exception {
int[][] arr = {};
FileInputStream fis = new FileInputStream(filePath);
DataInputStream dis = new DataInputStream(fis);
// 读取第一行数据
int row = dis.readInt();
int col = dis.readInt();
int count = dis.readInt();
// 第一行代表几行几列几个非零数
arr = new int[row][col];
// 根据count给arr赋值
for (int i = 0; i < count; i++) {
arr[dis.readInt()][dis.readInt()] = dis.readInt();
}
if (dis != null)
dis.close();
if (fis != null)
fis.close();
return arr;
}
4.将稀疏数组转成原始的二维数组
// 将稀疏数组转成原始的二维数组
// 读取第一行的,将第一行的数据,创建原始的数组
int[][] chessArray2 = new int[sparsArr[0][0]][sparsArr[0][1]];
// 读取稀疏数组后几行的数据(从第二行开始),并赋值给原始的二维数组
for (int i = 1; i < sparsArr.length; i++) {
chessArray2[sparsArr[i][0]][sparsArr[i][1]] = sparsArr[i][2];
}
// 输出恢复后的二维数组
System.out.println();
System.out.println("输出恢复后的二维数组~~");
for (int[] row : chessArray2) {
for (int data : row) {
System.out.print(data + " ");
}
System.out.println();
}
}
5.测试的代码
/**
* @author 缪广亮
* @version 1.0
*/
public class SparseArray01 {
public static void main(String[] args) throws Exception {
// 将一个11x11的二维数组
int[][] chessArray = new int[11][11];
// 0:无子;1:黑子;2:蓝子
chessArray[1][2] = 1;
chessArray[2][3] = 2;
for (int[] row : chessArray) {
for (int data : row) {
System.out.print(data + " ");
}
System.out.println();
}
// 将二维数组转成稀疏数组
// 1.得到非零个数sum
int sum = 0;
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray.length; j++) {
if (chessArray[i][j] != 0)
sum++;
}
}
// 2.创建稀疏数组行数sum+1,列数固定,行数、列数和有效值
int[][] sparsArr = new int[sum + 1][3];
// 第一行记录二维数组的行数、列数和有效值个数
sparsArr[0][0] = 11;
sparsArr[0][1] = 11;
sparsArr[0][2] = sum;
// 用于记录是第几个非零数据
int count = 0;
// 遍历二维数组,将非零值存放到sparseArr中
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray.length; j++) {
if (chessArray[i][j] != 0) {
count++;
sparsArr[count][0] = i;
sparsArr[count][1] = j;
sparsArr[count][2] = chessArray[i][j];
}
}
}
System.out.println("稀疏数组为~~~~");
for (int i = 0; i < sparsArr.length; i++) {
System.out.printf("%d\t%d\t%d\t\n", sparsArr[i][0], sparsArr[i][1], sparsArr[i][2]);
}
// //4.将稀疏数组保存到文件中
// String filePath = "E:\\sparseArr.txt";
// saveSparseArrToFile(sparsArr, filePath);
//
// //5.将文件数据读取到稀疏数组中
// int[][] fileSparseArr = getSparseArrFromFile(filePath);
// //打印读取的稀疏数组
// System.out.println("打印读取转换后的二维数组:\n----------------------------");
// for (int[] row : fileSparseArr) {
// for (int data : row) {
// System.out.print(data+" ");
// }
// System.out.println();
// }
// 将稀疏数组转成原始的二维数组
// 读取第一行的,将第一行的数据,创建原始的数组
int[][] chessArray2 = new int[sparsArr[0][0]][sparsArr[0][1]];
// 读取稀疏数组后几行的数据(从第二行开始),并赋值给原始的二维数组
for (int i = 1; i < sparsArr.length; i++) {
chessArray2[sparsArr[i][0]][sparsArr[i][1]] = sparsArr[i][2];
}
// 输出恢复后的二维数组
System.out.println();
System.out.println("输出恢复后的二维数组~~");
for (int[] row : chessArray2) {
for (int data : row) {
System.out.print(data + " ");
}
System.out.println();
}
}
public static void saveSparseArrToFile(int[][] sparse, String filepath) throws Exception {
// 写入文件
FileOutputStream fos = new FileOutputStream(filepath);
DataOutputStream dos = new DataOutputStream(fos);
for (int[] row : sparse) {
for (int data : row) {
dos.writeInt(data);
}
}
if (dos != null)
dos.close();
if (fos != null)
fos.close();
}
public static int[][] getSparseArrFromFile(String filePath) throws Exception {
int[][] arr = {};
FileInputStream fis = new FileInputStream(filePath);
DataInputStream dis = new DataInputStream(fis);
// 读取第一行数据
int row = dis.readInt();
int col = dis.readInt();
int count = dis.readInt();
// 第一行代表几行几列几个非零数
arr = new int[row][col];
// 根据count给arr赋值
for (int i = 0; i < count; i++) {
arr[dis.readInt()][dis.readInt()] = dis.readInt();
}
if (dis != null)
dis.close();
if (fis != null)
fis.close();
return arr;
}
}
标签:sparseArray,chessArray,int,稀疏,sparsArr,++,数组,dis
From: https://www.cnblogs.com/mglblog/p/17848425.html