java实现稀疏数组和普通数组的转换

本文介绍了一种使用Java实现从普通二维数组到稀疏数组的转换方法,并详细展示了如何通过遍历有效数据来构建稀疏数组,以及如何将稀疏数组还原为原始的普通数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#java实现稀疏数组和普通数组的转换


/**
 *  稀疏数组
 */
public class SparseArrayTest {
    public static void main(String[] args) {
        //  从普通数组转到稀疏数组
        //1.先建立一个普通数组,遍历得到有效数据。 0代表无效数据  1.代表蓝色  2.代表黑色
        int[][] chessArr1 = new int[11][11];
        chessArr1[2][3] = 1;
        chessArr1[3][4] = 2;
        //2.输出这个普通的数组并判断有效数据
        int sum = 0;
        for (int[] rows : chessArr1) {
            for (int i = 0; i < rows.length; i++) {
                int data = rows[i];
                System.out.printf("%d\t",data);
                //判断有多少个有效数据
                if(data!=0){
                    sum++;
                }
            }
            System.out.println("");
        }
        System.out.println(sum);
        //建立一个 稀疏数组,然后把数组往稀疏数组里面 写入。
        int[][] sparseArr = new int[sum+1][3];
        // 对稀疏数组的第一行进行赋值。
        sparseArr[0][0] = 11;   
        sparseArr[0][1]=11;
        sparseArr[0][2]=sum;
        int count = 0;
        for (int i = 0; i < chessArr1.length; i++) {
            for (int j = 0; j < chessArr1[i].length; j++) {
               if(chessArr1[i][j]!=0){  //如果普通数组不为零,则把对应的角标值放入到稀疏数组的第二行。
                   count++;
                   sparseArr[count][0] =  i;
                   sparseArr[count][1] =  j;
                   sparseArr[count][2] = chessArr1[i][j];
               }
            }
        }
        System.out.println("——————————输出稀疏数组————————————");
        for (int i = 0; i < sparseArr.length; i++) {
            for (int j = 0; j < sparseArr[i].length; j++) {
                System.out.printf("%d\t",sparseArr[i][j]);
            }
            System.out.println();
        }
        System.out.println("从稀疏数组转到普通数组.....");
        //.从稀疏数组转到普通数组
        //1.先定义一个普通数组
        int[][] arr = new int[sparseArr[0][0]][sparseArr[0][1]];
        //2.循环稀疏数组,根据角标,把有效值赋值给 普通数组   注意,只给普通数组有效值,也就是把本例子中的1,2 移动过去就行。
        for (int i = 1; i < sparseArr.length; i++) {    //肯定是从第二行开始循环的。稀疏数组特性决定的。
             arr[sparseArr[i][0]][sparseArr[i][1]] =sparseArr[i][2];  //sparseArr[i][0]拿到的是稀疏数组的值,也就是arr[][]数组的有效值的行的角标值。
        }
        System.out.println("##########接下来输出返回后的普通数组的值#############");
        //循环就完事了
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.printf("%d\t",arr[i][j]);
            }
            System.out.println("");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值