学习笔记

二维数组简介

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。

二维数组

二维数组类似于五子棋的棋盘

引入稀疏数组

假如我们有二维数组,需要保存,发现上面的数据有很多数据是无效的数据,有效数据只有2个
这样保存下来会有很多的无效数据,假如无效数据过于庞大,会大大的影响网络传输效率等,所以就可以通过稀疏数组来让无效的数据消失.

代码解析(详细解释在代码注释中,二维数组转稀疏数组转二维数组)

package com.fs.demo01;
/*
稀疏数组
将原本二维数组多余的数据去除,保留原本的有效数据,降低数据的大小,提升效率*/
public class SparseArray {public static void main(String[] args) {//创建二维数组,来表示棋盘//0表示棋盘的点,1表示黑子,2表示蓝子int doubleArray[][] = new int[11][11];//给第2排的第3列放上一个黑子(行列从索引0开始)doubleArray[1][2] = 1;//给第三排的第4列放上一个蓝子doubleArray[2][3] = 2;//输出一下二维数组//循环遍历两次,因为二维数组是两个一维数组合成System.out.println("原始二维数组棋盘----------------------------");for (int[] ints : doubleArray) {for (int anInt : ints) {//排版一下System.out.printf("\t"+anInt);}//换行System.out.println();}System.out.println("将二维数组转成稀疏数组------------------------");//先遍历二维数组中数据非0 的个数//定义一个变量保存非0的个数int sum = 0;for (int i = 0; i < doubleArray.length; i++) {int[] ints = doubleArray[i];for (int j = 0; j < ints.length; j++) {int anInt = ints[j];if (anInt!=0){sum++;}}}System.out.println("二维数组中已经存放的棋子个数为:"+sum);/***  对应我们上面的二维数组*                                      稀疏数组格式*                          对应二维数组的行   对应二维数组的列    对应的值*    第一行是二维数组的格式     11(二维数组行)     11(二维数组列)   2(有效值)*    后面的就是对应二维数组的          1               2           1*    实际坐标                        2               3           2***      打印结果:*        11  11  2*          1   2   1*          2   3   2*///创建稀疏数组 行为sum+1,因为有一个二维数据数据行  列永远是三int sparseArray[][] = new int[sum+1][3];//给稀疏数组的行列复制sparseArray[0][0] = doubleArray.length;//第一行第一列sparseArray[0][1] = doubleArray.length;//第一行第二列sparseArray[0][2] = sum;//第一行第三列//遍历二维数组,当二维数组有值得时候记录坐标,将值赋值给稀疏数组//定义一个变量来存储当前是洗漱数组的第几行int row = 1;//稀疏数组从第二行开始,因为第1行存放了二维数组的数据for (int i = 0; i < doubleArray.length; i++) {int[] ints = doubleArray[i];for (int j = 0; j < ints.length; j++) {int anInt = ints[j];if (anInt!=0){sparseArray[row][0] = i;//row行的第1列存档有数据的行sparseArray[row][1] = j;//row行的第二列存放二维数组有数据的列sparseArray[row][2] = doubleArray[i][j];//row行的第三列存放有数据的二维数组本身的值row++;//存放完加一行}}}//循环遍历打印一下稀疏数组for (int[] ints : sparseArray) {for (int anInt : ints) {//排版一下System.out.printf("\t"+anInt);}//换行System.out.println();}System.out.println("将稀疏数组恢复成二维数组-----------------------");/*** 在将稀疏数组恢复成二维数组* 1.先读取稀疏数组的第一行数据,根据第一行数据恢复原来的二维数组平面* 2.然后读取稀疏数组的第二行后的数据,第二行的第一列就是有效值在二维数组的行,第二行的第二列就是有效值在二维数组的列,第二行的第三列就是有效值**///创建恢复的二维数组.sparseArray[0][1]==11 sparseArray[0][2]==11int doubleArrayNew[][] = new int[sparseArray[0][0]][sparseArray[0][1]];//循环稀疏数组,从第二行开始,将行列赋值在新的二维数组中for (int i = 1; i < sparseArray.length; i++) {/*对应稀疏数组的形态来看11  11  21  2   12  3   2循环第一次的时候sparseArray[i][0] = 1  sparseArray[i][1]=2  sparseArray[i][2]=1循环第二次的时候sparseArray[i][0] = 2  sparseArray[i][1]=3  sparseArray[i][2]=2*/doubleArrayNew[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}//打印一下新的二维数组,看打印结果是否和原来的一样for (int[] ints : doubleArrayNew) {for (int anInt : ints) {//排版一下System.out.printf("\t"+anInt);}//换行System.out.println();}}
}

执行结果

浅谈:稀疏数组与二维数组之间的转换相关推荐

  1. java 稀疏数组和二维数组转换,并保存稀疏数组到文件后可以读取

    稀疏数组和二维数组转换 稀疏数组:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组 稀疏数组的处理方法: 记录数组一共有多少行,有多少个不同的值 把具有不同值得元素的行 ...

  2. JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

    一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...

  3. java 二维数据结构_JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

    一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...

  4. 稀疏数组(二维数组)

    1.2.1 稀疏数组(二维数组) 一.应用场景 应用场景:当一个数组中大部分数据为同一个值时. 应用方法:1.记录数组中,一共有几行几列,有多少个不一样的值. ​ 2.把有不一样值的行.列记录到一个小 ...

  5. c语言bool怎么用_C语言中的一维数组和二维数组什么?怎么用?

    C++| 匠心之作 从0到1入门学编程[免费]​yun.itheima.com C语言除了基本数据类型之外,还提供了构造类型的数据,构造类型的数据包括数组类型.结构体类型和共用体类型.下面我们详细介绍 ...

  6. android 一维数组遍历,$.each()循环遍历一维数组、二维数组、JSON数据和DOM元素

    本文介绍$.each()循环遍历一维数组.二维数组.JSON数据和DOM元素. 请注意在使用JQuery $.each()方法前,要首先引用jquery库文件. $.each()循环遍历一维数组 Jq ...

  7. php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程

    本篇文章讲述了PHP实现一维数组与二维数组去重功能示例.希望对在php学习和开发的同学有所帮助! 数组中重复项的去除 一维数组的重复项: 使用array_unique函数即可,使用实例如下: ? $a ...

  8. 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

    文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...

  9. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)...

    二维数组,锯齿数组和集合 一.二维数组 二维数组: 一维数组----豆角 二维数组----表格 定义: 1.一维数组: 数据类型[] 数组变量名 = new 数据类型[数组长度]; 数据类型[] 数组 ...

最新文章

  1. C++中的const关键字(zz)
  2. 荣耀10 Turbo版将上线发布,游戏玩家欢呼的手游利器
  3. 科大奥锐实验报告霍尔效应_中科大929半导体物理专业课高分学长考研经验
  4. android动画view上移,在Android开发中使用View制作一个引导动画
  5. linux下使用ThinkPHP注意大小写问题
  6. python grid函数_(转)Python Tkinter Grid布局管理器详解
  7. 小程序入门学习16--上传小程序至github
  8. linux 中用vi编辑器替换字符
  9. 博文视点大讲堂第29期——2天玩转单反相机
  10. Atitit rss没落以及替代品在线阅读器
  11. 什么是代码评审(Code Review)
  12. easyUi后台,模板实现前台简易版网上书店功能实现
  13. 清风数学建模学习笔记——层次分析法(AHP)
  14. 英文简历模板计算机专业,计算机专业英文简历模板制作
  15. Origin画并列柱状图
  16. Java:Java实现简单闹钟设计
  17. 暴风魔镜 光标漂移_如何防止光标在游戏过程中漂移到另一个监视器
  18. VB对IE浏览器完全控制
  19. 统计学学习日记:L10-假设检验p值
  20. 免费发匿名信匿名短信的教程

热门文章

  1. jquery ajax异步调用
  2. 条款七 为多态基类声明virtual析构函数
  3. sql语句的一些细节东西学起来还是很费劲的,希望以后注意下。算是经验吧
  4. SQL Server数据库查询区分大小写、全半角——排序规则的应用(转载)
  5. 三次贝塞尔曲线平滑多边形
  6. 【Xamarin 挖墙脚系列:Xamarin SDK开源了................】
  7. mysql limit优化
  8. 11款有用的Web开发在线工具
  9. let const —— ES6基础总结(二)
  10. linux环境中,top命令中,对command的命令进行扩展查看详情?