Java二维数组与稀疏数组相互转换实现详解
二维数组与稀疏数组在Java中是常见的数据结构,二维数组用来表示二维网格数据,稀疏数组用来表示大部分元素都是相同值的数组。本篇攻略将详细讲解Java中如何实现二维数组与稀疏数组的相互转换。
1. 二维数组转稀疏数组
实现过程:
1. 遍历二维数组,统计非零元素的个数count。
2. 创建一个稀疏数组sparseArray,它包含count+1行,3列,第一行记录原二位数组的行数、列数和非零元素的个数,后面count行记录非零元素在原二维数组中的行列及其值。
3. 遍历二维数组,将非零元素放入稀疏数组中。
示例1:
// 原二维数组arr
int[][] arr = {
{0, 1, 0},
{2, 0, 0},
{0, 0, 3}
};
// 打印原二维数组
System.out.println("原二维数组:");
for (int[] row : arr) {
for (int element : row) {
System.out.print(element + "\t");
}
System.out.println();
}
// 转化为稀疏数组sparseArray
int count = 0;
for (int[] row : arr) {
for (int element : row) {
if (element != 0) {
count++;
}
}
}
int[][] sparseArray = new int[count+1][3];
sparseArray[0][0] = arr.length;
sparseArray[0][1] = arr[0].length;
sparseArray[0][2] = count;
int index = 1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
if (arr[i][j] != 0) {
sparseArray[index][0] = i;
sparseArray[index][1] = j;
sparseArray[index][2] = arr[i][j];
index++;
}
}
}
// 打印稀疏数组
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
for (int element : row) {
System.out.print(element + "\t");
}
System.out.println();
}
示例2:
// 原二维数组arr
int[][] arr = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 0}
};
// 打印原二维数组
System.out.println("原二维数组:");
for (int[] row : arr) {
for (int element : row) {
System.out.print(element + "\t");
}
System.out.println();
}
// 转化为稀疏数组sparseArray
int count = 0;
for (int[] row : arr) {
for (int element : row) {
if (element != 0) {
count++;
}
}
}
int[][] sparseArray = new int[count+1][3];
sparseArray[0][0] = arr.length;
sparseArray[0][1] = arr[0].length;
sparseArray[0][2] = count;
int index = 1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
if (arr[i][j] != 0) {
sparseArray[index][0] = i;
sparseArray[index][1] = j;
sparseArray[index][2] = arr[i][j];
index++;
}
}
}
// 打印稀疏数组
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
for (int element : row) {
System.out.print(element + "\t");
}
System.out.println();
}
2. 稀疏数组转二维数组
实现过程:
1. 读取稀疏数组第一行,获取原二维数组的行数、列数和非零元素的个数。
2. 创建一个二维数组arr,它的行数和列数分别为稀疏数组第一行中的行数和列数。
3. 遍历稀疏数组除第一行外的行,将非零元素放入二维数组中。
示例1:
// 稀疏数组sparseArray
int[][] sparseArray = {
{3, 3, 2},
{0, 1, 1},
{2, 2, 3}
};
// 打印稀疏数组
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
for (int element : row) {
System.out.print(element + "\t");
}
System.out.println();
}
// 转化为二维数组arr
int[][] arr = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++) {
arr[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
// 打印二维数组
System.out.println("二维数组:");
for (int[] row : arr) {
for (int element : row) {
System.out.print(element + "\t");
}
System.out.println();
}
示例2:
// 稀疏数组sparseArray
int[][] sparseArray = {
{3, 3, 3},
{0, 0, 1},
{0, 1, 2},
{1, 2, 3}
};
// 打印稀疏数组
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
for (int element : row) {
System.out.print(element + "\t");
}
System.out.println();
}
// 转化为二维数组arr
int[][] arr = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++) {
arr[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
// 打印二维数组
System.out.println("二维数组:");
for (int[] row : arr) {
for (int element : row) {
System.out.print(element + "\t");
}
System.out.println();
}
以上就是Java二维数组与稀疏数组相互转换的详细实现攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java二维数组与稀疏数组相互转换实现详解 - Python技术站