Java实现二维数组和稀疏数组之间的转换


Posted in Java/Android onJune 27, 2021

前言

用Java实现二维数据和稀疏数组之间的转换

1. 需求和思路分析

1.1 以二维数组的格式模拟棋盘、地图等类似的二维结构为基础,与稀疏数组之间进行转化。

Java实现二维数组和稀疏数组之间的转换

1.2 思路分析

二维数组转化为稀疏数组

  • 遍历原始的二维数组,得到有效数据个数 sum
  • 根据sum就可以创建稀疏数组sparseArr int[sunm+1][3]
  • 将二维数组的有效数据存入到稀疏数组

稀疏数组转为二维数组

  • 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
  • 再读取稀疏数组后几行的数据,并赋给原始的二维数组即可。

2.代码实现和展示

2.1 二维数组与稀疏数组之间的转化程序

public class SparseArr {

    public static void main(String[] args) {
        // 创建一个原始的二维数组 11 * 11
        // 0: 没有棋子;1:黑棋;2:白棋
        int[][] chessArr = new int[11][11];
        chessArr[1][2] = 1;
        chessArr[2][3] = 2;
        chessArr[2][6] = 1;

        // 打印输出原始二维数组
        System.out.print("原始二维数组为:\n");
        for(int[] a : chessArr ){
            for (int item : a ){
                System.out.printf( "%d\t", item );
            }
            System.out.println();

        }

        //将二维数组转换为稀疏数组思路
        // 1、遍历二维数组,统计有效数据的个数sum
        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++;
                }
            }
        }
        System.out.println("有效数据的个数为:" + sum);

        //2、建立稀疏数组,行列值
        int[][] sparseArr = new int[sum+1][3];

        //3、遍历原始二维数组转换为稀疏数组中的数据
        sparseArr[0][0] = 11;
        sparseArr[0][1] = 11;
        sparseArr[0][2] = sum;

        int count=1;
        for(int i=0;i < 11;i++){
            for(int j=0;j < 11;j++){
                if(chessArr[i][j] != 0){
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr[i][j];
                    count++;
                }
            }
        }

        //4 输出稀疏数组
        System.out.println("稀疏数组为:");
        for (int[] row : sparseArr) {
        //     for (int data : row) {
        //         System.out.printf( "%d\t",data);  
        //     }
        //     System.out.println();  
        // }
    
            System.out.printf("%d\t%d\t%d\t\n", row[0],row[1],row[2]);
        }

        // 将稀疏数组转化为二维数组
        // 1.读取稀疏数组首行数据,建立二维数组
        int[][] chessArr2 = new  int[sparseArr[0][0]][sparseArr[0][1]];

        // 2. 遍历稀疏数组,赋值给二维数组
        for (int i=1;i < sparseArr.length;i++) {
            chessArr2[sparseArr[1][0]][sparseArr[1][1]] = sparseArr[i][2];
        }
        
        // 3. 打印输出原始的二维数组
        System.out.print("原始二维数组为:\n");
        for (int[] row : chessArr2) {
            for (int data : row) {
                System.out.printf("%d\t", data); 
            }
            System.out.println();
        }
    } 
}

2.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       1       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
有效数据的个数为:3
稀疏数组为:
11      11      3
1       2       1
2       3       2
2       6       1
原始二维数组为:
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       1       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

3. 总结

用Java语言实现二者之间的转化,思路很重要,按着思路写代码就会很省事,难的点可能是不知道如何写代码。
注意:printf 和 print 输出的格式不同。

参考视频

尚硅谷Java数据结构与java算法(Java数据结构与算法)

到此这篇关于Java实现二维数组和稀疏数组之间的转换的文章就介绍到这了,更多相关Java 二维数组和稀疏数组转换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
分析并发编程之LongAdder原理
Jun 29 Java/Android
logback 实现给变量指定默认值
Aug 30 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
OpenCV实现普通阈值
Nov 17 Java/Android
关于ObjectUtils.isEmpty() 和 null 的区别
Feb 28 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
spring注解 @PropertySource配置数据源全流程
Mar 25 Java/Android
解决springboot druid数据库连接失败后一直重连的方法
Apr 19 Java/Android
SpringBoot 集成短信和邮件 以阿里云短信服务为例
Apr 22 Java/Android
Android Studio 计算器开发
May 20 Java/Android
spring boot实现文件上传
Aug 14 Java/Android
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
分析Java中Map的遍历性能问题
Jun 26 #Java/Android
SpringCloud的JPA连接PostgreSql的教程
You might like
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
CI框架常用函数封装实例
2016/11/21 PHP
php中namespace及use用法分析
2016/12/06 PHP
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
layui使用label标签的方法
2019/09/14 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
见习期自我鉴定
2013/11/07 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
党员倡议书
2015/01/19 职场文书
对学校的意见和建议
2015/06/04 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
《我是什么》教学反思
2016/02/16 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
vscode中使用npm安装babel的方法
2021/08/02 Javascript
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis