稀疏数组介绍

当一个数组中大部分的元素为0,或者同一值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方式是:
1.记录数组一共有几行几列,有多少个不同的值
2.把具有不同值的元素的行列及值记录在一个小规模的数组中从而缩小程序的规模

下面给出一个数组:
0 0 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 2 0 0 0
0 0 0 0 0 0 0
将其转换为稀疏数组:
行   列   值
4     7     2
2     3     1
3     4     2

代码演示

 public static void main(String[] args) {//创建原始数组int arr1[][] = new int[4][7];arr1[1][2] = 1;arr1[2][3] = 2;//输出原始数组System.out.println("输出原始数组");for (int i = 0; i <4; i++) {for (int j = 0; j <7; j++) {System.out.print(arr1[i][j]+" ");}System.out.println();}System.out.println("================分割线==================");//将原始数组转换为稀疏数组保存//获取有效值的个数int sum=0;for (int i = 0; i <4 ; i++) {for (int j = 0; j <7 ; j++) {if(arr1[i][j]!=0){sum++;}}}System.out.println("有效值的个数为:"+sum);//创建稀疏数组int arr2[][] = new int[sum+1][3];arr2[0][0] = 4;arr2[0][1] = 7;arr2[0][2] = sum;//遍历二维数组arr1,将非零的值存放在稀疏数组arr2中//记录行数int count = 0;for (int i = 0; i <4 ; i++) {for (int j = 0; j <7 ; j++) {if(arr1[i][j]!=0){count++;arr2[count][0] = i;arr2[count][1] = j;arr2[count][2] = arr1[i][j];}}}//输出稀疏数组System.out.println("稀疏数组:");for (int i = 0; i <count+1; i++) {for (int j = 0; j <3; j++) {System.out.print(arr2[i][j]+" ");}System.out.println();}System.out.println("================分割线==================");//将稀疏数组转换为原始数组int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];for (int i = 1; i <arr2.length ; i++) {arr3[arr2[i][0]][arr2[i][1]] = arr2[i][2];}//打印转换后的稀疏数组System.out.println("稀疏数组转换为原始数组:");for (int i = 0; i <4; i++) {for (int j = 0; j <7; j++) {System.out.print(arr3[i][j]+" ");}System.out.println();}}

输出结果

(JAVA学习笔记) 关于稀疏数组相关推荐

  1. java学习笔记Day3:数组

    1.数组 1.1Debug F5:往调用内追踪 F6:按行追踪 F7:跳出方法体 F8:跳过剩余或者跳到下一个断点 1.2数组的定义 数组是一个变量,存储相同数据类型的一组数据,声明一个变量就是在内存 ...

  2. java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组

    java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 文章目录 java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 一.运算符和表达式 1.数学函数与 ...

  3. Java 学习笔记 - 数组类型互转

    Java 学习笔记 - 数组类型互转 数组类型转换 字符串数组 to (Integer.Long.Double)列表 传统方式 Java8 Stream方式 数组 to 数组 字符串数组 to (in ...

  4. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  5. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  6. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  7. Java学习笔记(十)--控制台输入输出

    输入输出 一.控制台输入 在程序运行中要获取用户的输入数据来控制程序,我们要使用到 java.util 包中的 Scanner 类.当然 Java 中还可以使用其他的输入方式,但这里主要讲解 Scan ...

  8. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  9. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

最新文章

  1. C#操作Excel时,Excel常用的方法和属性zz
  2. python可以用来编写计算机网络程序吗_不必熟悉python或R编程语言,6步执行计算机视觉应用程序...
  3. Tomcat6 ,servlet配置(可用)
  4. faster rcnn学习之rpn训练全过程
  5. python为什么是动态语言_python为什么是动态语言
  6. AUTOSAR专业知识篇(七)-比亚迪汉ECU接口
  7. 拓端tecdat|R语言用AR,MA,ARIMA 模型进行时间序列预测
  8. 微信公众平台接入广告投放系统
  9. 2018 苹果开发者账号注册、付款流程图解
  10. CDN:BootCDN
  11. 港澳台、内地身份证号校验规则
  12. VC浏览器相关的学习(七)(BHO捕获鼠标键盘事件)
  13. 微服务项目:尚融宝(40)(核心业务流程:申请借款额度(3))
  14. 如何用Robotics Toolbox 建模多自由度的机械手臂
  15. DayDayUp:我是CSDN开发者生态联盟成员“一个处女座的程序猿”:渡己是一种能力,渡人是一种格局
  16. 情感计算 - 情感倾向性分析
  17. MetroGAN: Simulating Urban Morphology with Generative Adversarial Network
  18. RBM到MPS的转换
  19. 2021江苏计算机成绩,2021年江苏省高考学生的成绩6达到25分,选择南京的东南大学,还是武汉的华科、武大呢?...
  20. 【BI学习心得16-模型融合与供应链预测】

热门文章

  1. 出块过程 (1)close发送消息
  2. 微众WeCross 跨链平台(2)网络拓扑
  3. 打家劫舍系列(dp)
  4. optee中TA的堆的分配
  5. [How TO]-How to install maven
  6. 2021-09-22
  7. 2020-11-30(为什么字符串可以赋值给字符指针变量)
  8. 【Web安全】Web开发中常见的安全误区
  9. 软件调试学习笔记(六)—— 硬件断点
  10. MySQL删除数据表(DORP TABLE语句)