稀疏数组
1.基本介绍

2.实际问题与实现示意图


3.代码实现
package SparseArr;
import java.lang.reflect.Array;
import java.util.Arrays;
/**
* @author xq
* @create 2021-01-10-20:57
*/
public class MySparseArray {
public static void main(String[] args) {
int[][] arr = new int[6][7];
arr[0][3] = 22;
arr[0][6] = 15;
arr[1][1] = 11;
arr[1][5] = 17;
arr[2][3] = -6;
arr[3][5] = 39;
arr[4][0] = 91;
arr[5][2] = 28;
// for (int[] i : arr) {
// for (int a : i) {
// System.out.print(a + "\t");
// }
// System.out.println();
// }
util util = new util();
int[][] sparseArray = util.toSparseArray(arr);
for (int[] a : sparseArray){
for (int i : a){
System.out.print(i + "\t");
}
System.out.println();
}
}
}
class util {
public int[][] toSparseArray(int[][] arr) {
int count = 0;
for (int[] i : arr) {
for (int a : i) {
if (a != 0) {
count++;
}
}
}
int[][] arr1 = new int[count + 1][3];
arr1[0][0] = 6;
arr1[0][1] = 7;
arr1[0][2] = count;
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] != 0){
sum++;
arr1[sum][0] = i + 1;
arr1[sum][1] = j + 1;
arr1[sum][2] = arr[i][j];
}
}
}
return arr1;
}
}
4.代码实现过程遇到的问题和思考
数组如何输出(两种方式)
增强for循环
for (int[] a : sparseArray){
for (int i : a){
System.out.print(i + "\t");
}
System.out.println();
}
for循环
比较简单
如何将转换好的稀疏数组写入文本
Writer writer = null;
try {
writer = new FileWriter("D:\\map.txt");
for (int i = 0; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr[i].length; j++) {
writer.write(sparseArr[i][j] + "\t");
}
writer.write("\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null)
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
如何将稀疏数组转化为正常数组
//将稀疏数组转化为正常数组
public int[][] toArray(int[][] arr){
int[][] arr1 = new int[arr[0][0]][arr[0][1]];
for (int i = 1; i < arr[0][2]; i++) {
arr1[arr[i][0]][arr[i][1]] = arr[i][2];
}
return arr1;
}
如何将txt文件中的稀疏数组输出
//读取txt文件
public void readFile(String pathname){
Reader r = null;
try {
File file = new File(pathname);
r = new BufferedReader(new FileReader(file));
char[] cbuf = new char[1024];
int len ;
while ((len = r.read(cbuf)) != -1) {
System.out.println(cbuf);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (r != null)
r.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
博客围绕稀疏数组展开,介绍了其基本概念和实际问题的实现示意图,给出了代码实现。还探讨了代码实现过程中遇到的问题,如数组的两种输出方式、将稀疏数组写入文本、转化为正常数组以及输出txt文件中的稀疏数组等。
1350

被折叠的 条评论
为什么被折叠?



