java稀疏数组
java稀疏数组
因为有些二维数组大部分元素都是为0,因此记录了很多没有意义的数据。因此引入稀疏数组(一种数据结构)
处理方式:记录一共有几行几列,有多少个不同的值。
package charpter4;
public class Demo {
public static void main(String[] args) {
//0:没有棋子,1黑棋,2白棋
int[][] array1= new int[11][12];
array1[1][2]=1;
array1[2][3]=2;
//输出最原始的数组
System.out.println("输出最原始的数组:");
for(int[] ints:array1){
for(int anInt:ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
//转换为稀疏数组
//获取有效值个数
int sum = 0;
for (int[] value : array1) {
for (int j = 0; j < array1[0].length; j++) {
if (value[j] != 0)
sum++;
}
}
//创建一个稀疏数组
int[][] array2 = new int[sum+1][3];
array2[0][0]=array1.length;
array2[0][1]=array1[0].length;
array2[0][2]=sum;
//将非0元素的值放入稀疏数组
int count=0;
for(int i=0;i<array1.length;i++)
for(int j=0;j<array1[0].length;j++){
if(array1[i][j]!=0){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=array1[i][j];
}
}
System.out.println("稀疏数组:");
for(int[] ints:array2){
for(int anInt:ints){
System.out.print(anInt+" ");
}
System.out.println();
}
//稀疏数组还原
int[][] array3=new int[array2[0][0]][array2[0][1]];
int cnt=1;
while(cnt<=array2[0][2]){
array3[array2[cnt][0]][array2[cnt][1]]=array2[cnt][2];
cnt++;
}
System.out.println("稀疏数组还原:");
for(int[] ints:array3){
for(int anInt:ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}

浙公网安备 33010602011771号