• JAVA稀疏数组


    应用案例

    稀疏数组转换思路分析

    代码:

    public class test {
        public static void main(String[] args)
        {
            //稀疏数组
            //1、先创建一个二维数组      11*11
            //0表示没有棋子,1表示黑子,2表示蓝子
            int chessArray1[][] = new int[11][11];
            chessArray1[1][2] = 1;
            chessArray1[2][3] = 2;
            //输出原始的二维数组
            System.out.println("原始的稀疏数组");
            for(int i = 0;i < chessArray1.length;i++)
            {
                for(int j = 0;j < chessArray1[i].length;j++)
                {
                    System.out.print(" "+chessArray1[i][j]);
                }
                System.out.println();
            }
            //将二维数组转换为稀疏数组
            //1.首先遍历二维数组,找到有效数字
            int sum = 0;
            for(int i = 0;i < chessArray1.length;i++)
            {
                for(int j = 0;j < chessArray1[i].length;j++)
                {
                    if(chessArray1[i][j] != 0)
                        sum++;
                }
            }
            System.out.print("有效数字的个数:");
            System.out.println(sum);//输出有效数字的个数
            //2.创建对应的稀疏数组
            int sparseArr[][] = new int[sum+1][3];
            //给稀疏数组赋值
            sparseArr[0][0] = 11;
            sparseArr[0][1] = 11;
            sparseArr[0][2] = sum;
            //遍历二维数组将非0的值存入稀疏数组中
            int count = 1;
            for(int i = 0;i < chessArray1.length;i++)
            {
                for(int j = 0;j < chessArray1[i].length;j++)
                {
                    if(chessArray1[i][j] != 0)
                    {
                        sparseArr[count][0] = i;
                        sparseArr[count][1] = j;
                        sparseArr[count][2] = chessArray1[i][j];
                        count++;
                    }
                }
            }
            //输出稀疏数组的形式
            System.out.println("输出稀疏数组");
            for(int i = 0;i < sparseArr.length;i++)
            {
                for(int j = 0;j < sparseArr[i].length;j++)
                {
                    System.out.print("    "+sparseArr[i][j]);
                }
                System.out.println();
            }
            //将稀疏数组恢复成原来的二维数组
            //1.读取稀疏数组的第一行,根据第一行数据,创建稀疏数组
            int chessArray2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
            //2.把稀疏数组的后几行数据给二维数组
            for(int i = 1;i < sparseArr.length;i++)
            {
                chessArray2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];        
            }
            //3.打印转换之后的二维数组
            System.out.println("转换之后的二维数组");
            for(int i = 0;i < chessArray2.length;i++)
            {
                for(int j = 0;j < chessArray2[i].length;j++)
                {
                    System.out.print(" "+chessArray2[i][j]);
                }
                System.out.println();
            }
        }
    }

    运行结果:

    原始的稀疏数组
    0 0 0 0 0 0 0 0 0 0 0
    0 0 1 0 0 0 0 0 0 0 0
    0 0 0 2 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 0
    有效数字的个数:2
    输出稀疏数组
    11 11 2
    1 2 1
    2 3 2
    转换之后的二维数组
    0 0 0 0 0 0 0 0 0 0 0
    0 0 1 0 0 0 0 0 0 0 0
    0 0 0 2 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 0

  • 相关阅读:
    unity-TextAsset
    unity-热更-InjectFix
    进程和线程的区别
    StringBuffer 和 StringBuilder 的区别
    List、Set、Map 三者区别
    竞态条件是什么?
    多线程安全(synchronized、三大特性、生命周期以及优缺点)
    集合的同步与非同步
    List、Set、Map的了解及区别
    java面试题
  • 原文地址:https://www.cnblogs.com/lintianxiajun/p/12818677.html
Copyright © 2020-2023  润新知