稀疏数组简介
原数组可能存在大量无效数据,为了节省存储空间,就有了稀疏数组一说。稀疏数组实际上就是存储了原数组有效数据的一种数组。
稀疏数组的表示法
稀疏数组采用三元表示法表示,这里给出一个示例二维数组
int[][] arr = new int[10][10];
arr[1][2] = 1;
arr[3][5] = 1;
arr[6][9] = 1;
其图示为:
0 | 0 | 0 | 0 | 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 | 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 | 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 |
三元组表示法如下
行(row) | 列(col) | 值(value) | |
---|---|---|---|
0 | 10 | 10 | 3 |
1 | 1 | 2 | 1 |
2 | 3 | 5 | 1 |
3 | 6 | 9 | 1 |
三元表示法含义
- 第一行中的数值比较特殊,行和列代表原数组的行数和列数。值代表原数组中非零数据的个数
- 往后每一行代表一个值的行、列、值属性。如arr[1][2] = 1 ,则三元表中行存放这个数值的行,列存放这个数值的列,值存放这个数值。
三元组表示法的实际转换原理
- 不难看出三元组只有三列,因此列固定为3(上图第一列为我自己添加的索引,不算入表中)
- 细心的同学发现,除了第一行的特殊数值,其行数与第一行第三列的值数相对应。因此三元组的行数为有效值的个数 + 1 。
基础介绍就是这些,接下来是代码演示(就拿这个示例来写)
实战
一、原数组转化为稀疏数组
public static void main(String[] args) {
int[</