算法 稀疏数组 数组优化 数组压缩 二维数组转稀疏数组 算法合集(二)_不努力就种地~的博客-CSDN博客
算法解答最后有个问题:
1) 在前面的基础上,将稀疏数组保存到磁盘上,比如 map.data
2) 恢复原来的数组时,读取 map.data 进行恢复
思路:
a. 二维数组转换为字符串命名为map.txt文件进行存储
b. 读取文件map.txt的字符串,进行二维数组的转换
1. 下面是二维数组转字符串:
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
chessArr1[4][5] = 2;
# 使用arrays 方法转字符串
String arrayVar = Arrays.deepToString(chessArr1);
2. jackson 的objectMapper进行字符串转二维数组:
pom引用:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.0</version>
</dependency>
代码:
# 生产时,这个new应该是放在JsonUtils内进行初始化,目的只初始化一次对象,使用JsonUtils.readValue封装的方法,本文只是示例。
ObjectMapper om = new ObjectMapper();
Integer[][] integers = om.readValue(s, Integer[][].class);
# 打印测试代码是否正常
for (int i = 0; i < integers.length; i++) {
System.out.printf("dddddd %d\t%d\t%d\t\n", integers[i][0], integers[i][1], integers[i][2]);
}
3. 也可以读取字符串,进行字符串的切割,进行转换:
/**
* str转换 int [][]
* 本方法只作为示例,如果需要用此方法,建议try catch下然后抛出一个businessException
* 可以将方法中"," 用常量替代哦!
* @param needConvertChar
* @return
*/
public static int[][] string2Array(String needConvertChar) {
if (StringUtils.isBlank(needConvertChar)) {
return null;
}
String needConvertChar0 = needConvertChar.substring(1, needConvertChar.length());
needConvertChar0 = needConvertChar0.substring(0, needConvertChar0.length() - 1);
String[] rows = needConvertChar0.split("],");
String first = rows[0];
String[] cols = first.substring(1, first.length()).split(",");
int[][] result = new int[rows.length][cols.length];
for (int i = 0; i < rows.length; i++) {
String row = rows[i].trim();
String[] columns = row.substring(1, row.length()).split(",");
for (int j = 0; j < columns.length; j++) {
String column = columns[j];
if (column.endsWith("]")) {
column = column.replace("]", "");
}
result[i][j] = Integer.valueOf(column.trim());
}
}
return result;
}
4. 如果需要存储到文本文件,文中需要用到的fileUtil 建议参考工作项目框架中的fileUtils