稀疏数组
数组
- 特点
- 数组是相同数据类型的元素的集合。
- 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
- 数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
稀疏数组
定义
如果一个数组(包括多维数组)中的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,节约空间。
实现方法
1.记录数组一共有几行几列,有多少个不同的数值。
2.把具有不同值的元素的行列及记录在一个小规模的数组中,从而缩小程序的规模。
代码如下:
package dataStructure;
/**
* 稀疏数组
* 应用场景:如果一个数组(包括多维数组)中的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组 节约空间
* 由于其他大部分相同的数据没有记录,所以可以达到节省空间的目的
*
* 稀疏数组的定义:
* 1.记录数组一共有几行几列,有多少个不同的数值。
* 2.把具有不同值的元素的行列及记录在一个小规模的数组中,从而缩小程序的规模。
*
* 稀疏数组是一个n行3列的数组
* 第一行记录原数组有多少行 多少列 有多少个不一样的值
* 剩余的行记录每一个不一样的值 行id 列id 值
*
* 应用场景:五子棋
* 我们记录棋盘中交点 默认为0 白子为1 黑子为2,以此来记录下棋的数据
*
*/
public class SparseArrayDemo {
public static void main(String[] args) {
//普通数据
int[][] array = new int[19][19];
//黑子下 1-4 白字下 2-6的位置
array[0][3]=2;
array[1][5]=1;
//稀疏数组
int[][] sparseArray=new int[3][3];
//第一行记录 行数 列数 值的个数
sparseArray[0] = new int[]{11, 11, 2};
将其他不一样的值存起来
int tempIndex =1;
for (int i = 0; i <array.length ; i++) {
int[] temp = array[i];
for (int j = 0; j < temp.length; j++) {
if(temp[j]!=0){
sparseArray[tempIndex] = new int[]{i, j, temp[j]};
tempIndex++;
}
}
}
System.out.println("原数组数据存储为:");
for (int[] temp:array) {
for(int data:temp){
System.out.printf("%d\t",data);
}
System.out.println();
}
System.out.println("稀疏数组数据存储为:");
for (int i = 0; i <sparseArray.length ; i++) {
System.out.printf("%d\t%d\t%d\t\n",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);
}
}
/**
* 输出结果:
原数组数据存储为:
0 0 0 2 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 2
0 3 2
1 5 1
*/
}