当数组中大部分为相同元素的时候,可以使用稀疏数组(二维数组)来记录
第一行 记录整体 : 原数组行数 列数 不同于大部分元素的数据的个数
剩下的行记录不同元素信息: 元素行 元素列 值
格式: int[ ] a=new int[不同元素个数加一][ 3 ];
举例:
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 2 | 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 |
将上面数组用稀疏数组表示:
import com.sun.javaws.IconUtil;
import java.lang.reflect.Array;
import java.util.Arrays;
public class ForNum {
public static void main(String[] args) {
int[][] a=new int[11][11];//定义原数组
for(int[] c:a)
{
Arrays.fill(c,0);
}
a[2][3]=1;//给原数组赋值
a[1][2]=2;
int sum=0;//计数
for (int i = 0; i <a.length ; i++) //遍历数组,统计不同元素个数
{
for (int j = 0; j < a[0].length; j++) {
if(a[i][j]!=0)
{
sum++;
}
}
}
int[][] b=new int[sum+1][3];//定义稀疏数组
int l = 1;
for (int i = 0; i <a.length ; i++)//给稀疏数组赋值
{
for (int j = 0; j <a[0].length ; j++)
{
if(a[i][j]!=0)
{
b[l][0]=i;
b[l][1]=j;
b[l][2]=a[i][j];
l++;
}
b[0][0]=i+1;
b[0][1]=j+1;
b[0][2]=l-1;
}
}
for (int i = 0; i < l; i++) {
for (int j = 0; j <3 ; j++) {
System.out.print(b[i][j]+" ");
}
System.out.println("\n");
}
}
}
输出效果: