java 稀疏数组

2021/7/14 12:34:51

本文主要是介绍java 稀疏数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

/**
 * 稀疏数组
 *
 * @author Mulun
 */
public class SparseArray2 {

    /**
     * 原始数组
     * <p>
     * 规则:
     * <p>
     * 0:无数据
     * <p>
     * 1:黑棋
     * <p>
     * 2:白棋
     */
    static int[][] chessArr = new int[19][19];

    /**
     * 模拟原始数组数据
     */
    static {
        chessArr[3][3] = 1;
        chessArr[5][5] = 2;
    }

    @Test
    public void main() {
        // 原始数组
        System.out.println("============原始二维数组");
        Arrays.stream(chessArr).forEach(r -> {
            Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
            System.out.println();
        });

        // 转换成稀疏数组
        // 1.获取原始二维数组的有效数据个数
        // 记录原始二维数组的有效数据个数
        int sum = 0;
        for (int i = 0; i < chessArr.length; i++) {
            for (int j = 0; j < chessArr[0].length; j++) {
                if (chessArr[i][j] != 0) {
                    sum++;
                }
            }
        }

        // 2.创建稀疏数组
        int[][] spArray = new int[sum + 1][3];

        // 3.给稀疏数组赋值
        spArray[0][0] = chessArr.length;
        spArray[0][1] = chessArr[0].length;
        spArray[0][2] = sum;

        // 用来记录是第几个非0数据
        int count = 0;
        for (int i = 0; i < chessArr.length; i++) {
            for (int j = 0; j < chessArr[0].length; j++) {
                if (chessArr[i][j] != 0) {
                    count++;
                    // 第几行
                    spArray[count][0] = i;
                    // 第几列
                    spArray[count][1] = j;
                    // 值是什么
                    spArray[count][2] = chessArr[i][j];
                }
            }
        }

        System.out.println("============稀疏数组");
        Arrays.stream(spArray).forEach(r -> {
            Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
            System.out.println();
        });

        // 转换回二维数组

        // 创建二维数组
        int[][] chessArr2 = new int[spArray[0][0]][spArray[0][1]];

        // 给二维数组赋值
        for (int i = 1; i < spArray.length; i++) {
            chessArr2[spArray[i][0]][spArray[i][1]] = spArray[i][2];
        }

        System.out.println("============恢复后的二维数组");
        Arrays.stream(chessArr2).forEach(r -> {
            Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
            System.out.println();
        });

        // 以时间,换空间,稀疏数组
    }
}


这篇关于java 稀疏数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程