Java数据结构基础:稀疏数组
在开发过程中,我们需要处理一些稀疏矩阵(大部分元素为0)的数据。这时候,使用稀疏数组是比较高效的方法。
什么是稀疏数组
稀疏数组是由很多元素值相同的元素组成,这些元素的值通常为0。而这些值不同时都存储在一个数组中会浪费很多内存空间。因此,我们使用稀疏数组来存储这些元素。
稀疏数组的定义:
稀疏数组的行数可以理解为矩阵的行数,而列数可以理解为矩阵的列数,也可以理解为原数组的元素个数,而值则是原数组中非0元素的值。
稀疏数组的例子
现在我们通过一个具体的例子来理解一下稀疏数组。
int[][] myArray = new int[11][11];
myArray[1][2] = 1;
myArray[2][3] = 2;
上面的代码创建了一个11*11的数组,并且将(1,2)的坐标值赋为1,将(2,3)的坐标值赋为2。现在我们将这个数组转换成稀疏数组。
int count = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (myArray[i][j] != 0) {
count++;
}
}
}
int[][] sparseArray = new int[count + 1][3];
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = count;
int sparseArrayIndex = 1;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (myArray[i][j] != 0) {
sparseArray[sparseArrayIndex][0] = i;
sparseArray[sparseArrayIndex][1] = j;
sparseArray[sparseArrayIndex][2] = myArray[i][j];
sparseArrayIndex++;
}
}
}
上述代码将原数组转换成了稀疏数组,数组的第一维表示当前行的坐标,第二维表示当前列的坐标,第三维表示当前值。
这里的稀疏数组为:
11 11 2
1 2 1
2 3 2
稀疏数组的读取
从稀疏数组中读取原数组的值,只需要将稀疏数组再转换成原数组。
int[][] myArray2 = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i <= sparseArray[0][2]; i++) {
myArray2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
上述代码通过循环将稀疏数组中的值写入到新的数组中,最后的数组即为原数组。
总结
稀疏数组是一种对于大部分元素为0的矩阵高效存储方法。通过稀疏数组的定义、例子和读取方法,我们可以更好的了解它的应用场景和使用方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java数据结构基础:稀疏数组 - Python技术站