# 二维数组与稀疏数组转换(java)

## 一、什么是稀疏数组

1 0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

11  11  3
0 0 1
0 3 1
1 1 1

## 二、二维数据如何转换为稀疏数组

 //    二维数组转稀疏数组
private static int[][] array2SparsArray(int[][] array) {
//获取二维数据行和列
int rowLength = array.length;
int colLength = array[0].length;
//获取不一样的数据
int sum = 0;
for (int i = 0; i < rowLength; i++) {
for (int j = 0; j < colLength; j++) {
if (array[i][j] != 0) {
sum++;
}
}
}
//初始化稀疏数组
int[][] sparsArray = new int[sum + 1][3];
//第一行保存二维数组的大小和不一样值得个数
sparsArray[0][0] = rowLength;
sparsArray[0][1] = colLength;
sparsArray[0][2] = sum;
//遍历二维数据，将不同的值的坐标和值保存到稀疏数组
//记录稀疏数组的行
int count = 0;
for (int i = 0; i < rowLength; i++) {
for (int j = 0; j < colLength; j++) {
if (array[i][j] != 0) {
count++;
//保存二维数组的坐标
sparsArray[count][0] = i;
sparsArray[count][1] = j;
//保存二维数组的值
sparsArray[count][2] = array[i][j];
}
}
}
return sparsArray;
}

## 三、稀疏数组如何恢复为二维数组

 //    稀疏数组转二维数组
private static int[][] sparsArray2Array(int[][] sparsArray) {
//获取二维数据行和列
int rowLength = sparsArray[0][0];
int colLength = sparsArray[0][1];
//初始化二维数组
int[][] array = new int[rowLength][colLength];
int sparsArrayLength = sparsArray.length;
for (int i = 1; i < sparsArrayLength; i++) {
//回复二维数组中不一样的值
array[sparsArray[i][0]][sparsArray[i][1]] = sparsArray[i][2];
}
return array;
}

## 四、完整代码并测试



public class sparsearray {
public static void main(String[] args) {
int[][] array1 = new int[11][11];
array1[0][0] = 1;
array1[1][1] = 1;
array1[0][3] = 1;
System.out.println("打印二维数组");
printArray(array1);
int[][] sparsArray = array2SparsArray(array1);
System.out.println("打印二维数组转换后的稀疏数组");
printArray(sparsArray);
System.out.println("打印稀疏数组回复后的二维数据");
int[][] array2 = sparsArray2Array(sparsArray);
printArray(array2);
}

//    二维数组转稀疏数组
private static int[][] array2SparsArray(int[][] array) {
//获取二维数据行和列
int rowLength = array.length;
int colLength = array[0].length;
//获取不一样的数据
int sum = 0;
for (int i = 0; i < rowLength; i++) {
for (int j = 0; j < colLength; j++) {
if (array[i][j] != 0) {
sum++;
}
}
}
//初始化稀疏数组
int[][] sparsArray = new int[sum + 1][3];
//第一行保存二维数组的大小和不一样值得个数
sparsArray[0][0] = rowLength;
sparsArray[0][1] = colLength;
sparsArray[0][2] = sum;
//遍历二维数据，将不同的值的坐标和值保存到稀疏数组
//记录稀疏数组的行
int count = 0;
for (int i = 0; i < rowLength; i++) {
for (int j = 0; j < colLength; j++) {
if (array[i][j] != 0) {
count++;
//保存二维数组的坐标
sparsArray[count][0] = i;
sparsArray[count][1] = j;
//保存二维数组的值
sparsArray[count][2] = array[i][j];
}
}
}
return sparsArray;
}

//    稀疏数组转二维数组
private static int[][] sparsArray2Array(int[][] sparsArray) {
//获取二维数据行和列
int rowLength = sparsArray[0][0];
int colLength = sparsArray[0][1];
//初始化二维数组
int[][] array = new int[rowLength][colLength];
int sparsArrayLength = sparsArray.length;
for (int i = 1; i < sparsArrayLength; i++) {
//回复二维数组中不一样的值
array[sparsArray[i][0]][sparsArray[i][1]] = sparsArray[i][2];
}
return array;
}

//    二维数组打印
private static void printArray(int[][] array) {
int rowLength = array.length;
int colLength = array[0].length;
for (int i = 0; i < rowLength; i++) {
for (int j = 0; j < colLength; j++) {
System.out.printf("%d\t", array[i][j]);
}
System.out.println();
}
}

//    稀疏数组存盘

//    读取稀疏数组
}
打印二维数组
1 0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

11  11  3
0 0 1
0 3 1
1 1 1

1 0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 

|
2月前
|
Java

14 0
|
4天前
|

Java零基础(1) - 从零开始学习数组
【8月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏，专业攻坚指数级提升，希望能够助你一臂之力，帮你早日登顶实现财富自由🚀；同时，欢迎大家关注&&收藏&&订阅！持续更新中，up！up！up！！
16 1
|
2月前
|

Java中的数组函数库及其使用技巧
Java中的数组函数库及其使用技巧
37 10
|
8天前
|
Java
[Java]数组元素反转

7 0
|
8天前
|

[Java]比较数组内的值，取最大值

9 0
|
1月前
|

Java数组的初始化方法
Java数组的初始化方法
28 3
|
1月前
|

Java数组操作：基础与进阶指南
Java数组操作：基础与进阶指南
19 1
|
28天前
|
Java Apache Maven
Java：commons-codec实现byte数组和16进制字符串转换

17 0
|
29天前
|
Java Apache Maven
Java：commons-codec实现byte数组和16进制字符串转换

22 0
|
1月前
|
Java 索引

25 0