本文主要是介绍java 稀疏数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/**
* 稀疏数组
*
* @author Mulun
*/
public class SparseArray2 {
/**
* 原始数组
* <p>
* 规则:
* <p>
* 0:无数据
* <p>
* 1:黑棋
* <p>
* 2:白棋
*/
static int[][] chessArr = new int[19][19];
/**
* 模拟原始数组数据
*/
static {
chessArr[3][3] = 1;
chessArr[5][5] = 2;
}
@Test
public void main() {
// 原始数组
System.out.println("============原始二维数组");
Arrays.stream(chessArr).forEach(r -> {
Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
System.out.println();
});
// 转换成稀疏数组
// 1.获取原始二维数组的有效数据个数
// 记录原始二维数组的有效数据个数
int sum = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr[0].length; j++) {
if (chessArr[i][j] != 0) {
sum++;
}
}
}
// 2.创建稀疏数组
int[][] spArray = new int[sum + 1][3];
// 3.给稀疏数组赋值
spArray[0][0] = chessArr.length;
spArray[0][1] = chessArr[0].length;
spArray[0][2] = sum;
// 用来记录是第几个非0数据
int count = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr[0].length; j++) {
if (chessArr[i][j] != 0) {
count++;
// 第几行
spArray[count][0] = i;
// 第几列
spArray[count][1] = j;
// 值是什么
spArray[count][2] = chessArr[i][j];
}
}
}
System.out.println("============稀疏数组");
Arrays.stream(spArray).forEach(r -> {
Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
System.out.println();
});
// 转换回二维数组
// 创建二维数组
int[][] chessArr2 = new int[spArray[0][0]][spArray[0][1]];
// 给二维数组赋值
for (int i = 1; i < spArray.length; i++) {
chessArr2[spArray[i][0]][spArray[i][1]] = spArray[i][2];
}
System.out.println("============恢复后的二维数组");
Arrays.stream(chessArr2).forEach(r -> {
Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
System.out.println();
});
// 以时间,换空间,稀疏数组
}
}
这篇关于java 稀疏数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!