稀疏数组
-
什么是稀疏数组:稀疏数组也是一种数据结构,当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
-
稀疏数组的处理方式是:
-
记录数组一共有几行几列,有多少个不同值;
-
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模,大大节约数组空间。
-
-
在了解稀疏数组之前先了解一下稀疏矩阵,把数组看成矩阵,其实稀疏数组就是由稀疏矩阵转化而来。
左图就可以看成一个数组,它属于稀疏矩阵,右图就是稀疏数组;
在二维数组中,稀疏数组只有三列,分别代表行、列、值,第一行是数组的总行数、总列数还有数组中的有效值个数(有效值是指不为零或者和大多数元素不一样的元素),其下面的每一行是每一个有效值所在的行数、列数和元素值。
- 通过转化稀疏数组实例来理解:
//创建一个普通数组并把它转化成稀疏数组
public static void main(String[] args) {
//创建一个二维数组
int[][] a=new int[10][10];
a[0][6]=5;
a[1][3]=9;
a[1][8]=22;
a[2][1]=3;
a[2][5]=17;
a[3][2]=10;
//遍历输出原始数组,使用增强型for循环
System.out.println("输出原数组:");
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
/**
for (int i=0;i<a.length;i++){
for (int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
*/
//转化为稀疏数组输出
//1.先判断并获取有效值个数
int sum=0;
for (int i=0;i<10;i++){
for (int j=0;j<10;j++){
if (a[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值个数:"+sum);
//2.创建一个稀疏数组,把已知的值赋给它
int[][] b=new int[sum+1][3];
b[0][0]=10;
b[0][1]=10;
b[0][2]=sum;
//通过遍历二维数组,赋值给稀疏数组,通过有效值个数来控制行数
int count=0;
for (int i=0;i<a.length;i++){
for (int j=0;j<a[i].length;j++){
if (a[i][j]!=0){
count++;
b[count][0]=i;
b[count][1]=j;
b[count][2]=a[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组");
for (int[] ints :b) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
- 运行结果: