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号
浙公网安备 33010602011771号