-
day09-Java数组
9.稀疏数组
什么是稀疏数组?
-
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
-
稀疏数组的处理方式是:
-
记录数组一共有几行几列,有多少个不同的值
-
把具有不同值 的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
-
如下图:左边是原始数组,右边是稀疏数组
根据上图创建稀疏数组:
|
package li.bolog.array; |
|
|
|
//创建稀疏数组 |
|
public class ArrayDemo08 { |
|
public static void main(String[] args) { |
|
|
|
//1.创建一个二维数组 11*11 0:代表没有棋子 1:黑棋 2:白棋 |
|
int[][] array1=new int[11][11]; |
|
array1[1][2]=1; |
|
array1[2][3]=2; |
|
|
|
//输出原始的数组 |
|
System.out.println("输出原始的数组:"); |
|
for (int[] ints:array1) { |
|
for (int anInt:ints){ |
|
System.out.print(anInt+"\t"); |
|
} |
|
System.out.println(); |
|
} |
|
System.out.println("============================="); |
|
|
|
//转换为稀疏数组保存 |
|
//获取有效值的个数sum |
|
int sum=0; |
|
for (int i = 0; i < 11; i++) { |
|
for (int j = 0; j < 11; j++) { |
|
if (array1[i][j] != 0) { |
|
sum++; |
|
} |
|
} |
|
} |
|
System.out.println("有效值的个数:"+sum); |
|
|
|
//2.创建一个稀疏数组 |
|
/*样式如图所示 |
|
一共有sum个有效值,则行数是sum+1,记录总行、列、有效值个数占一行,记录有效值占sum行 |
|
3列则是固定的,分别是行、列、值 |
|
*/ |
|
int[][] array2=new int[sum+1][3]; |
|
|
|
array2[0][0]=11; |
|
array2[0][1]=11; |
|
array2[0][2]=sum; |
|
|
|
//遍历二维数组,将非零的值存放到稀疏数组中 |
|
int count=0; |
|
for (int i = 0; i < array1.length; i++) {//array1.length代表array1的行数 |
|
for (int j = 0; j < array1[i].length; j++) {//array1[i].length代表列数 |
|
if (array1[i][j] != 0) { |
|
count++;//count数值从一开始,因为第0行已经存了稀疏数组的总行、列、有效值个数 |
|
array2[count][0]=i;//从当前行的第一个值存有效值的行数 |
|
array2[count][1]=j;//从当前行的第二个值存有效值的列数 |
|
array2[count][2]=array1[i][j];//从当前行的第三个值存放有效值数值 |
|
} |
|
} |
|
|
|
} |
|
//输出稀疏数组 |
|
|
|
System.out.println("稀疏数组:"); |
|
|
|
for (int i = 0; i < array2.length; i++) { |
|
System.out.println(array2[i][0]+"\t" |
|
+array2[i][1] +"\t" |
|
+array2[i][2] +"\t"); |
|
|
|
} |
|
|
|
System.out.println("============================="); |
|
|
|
//稀疏数组还原 |
|
//1.读取稀疏数组 |
|
//array2[0][0]代表原来数组总行数 array2[0][1]代表原来数组总列数 |
|
int[][] array3 = new int[array2[0][0]][array2[0][1]]; |
|
|
|
/* |
|
稀疏数组: |
|
11 11 2 |
|
1 2 1 |
|
2 3 2 |
|
*/ |
|
//2.给其中元素还原值 |
|
for (int i = 1; i < array2.length; i++) {//array.length为稀疏矩阵的行数,这里具体值为3 |
|
array3[ array2[i][0] ][ array2[i][1] ] = array2[i][2];//这里只填入了有效值,其他的0值在array3创建时已经隐式初始化 |
|
} |
|
|
|
//3.打印array3 |
|
System.out.println("输出还原的数组:"); |
|
for (int[] ints:array3) { |
|
for (int anInt:ints){ |
|
System.out.print(anInt+"\t"); |
|
} |
|
System.out.println(); |
|
} |
|
|
|
} |
|
} |
出处:https://www.cnblogs.com/liyuelian/p/16529803.html
栏目列表
最新更新
一个超经典 WinForm 卡死问题的再反思
C# 计算不规则多边形的相交/包含等关系
.NET Core 引发的异常:“sqlsugar.sqlsugarexcep
快速创建软件安装包-ClickOnce
nuget打包静态资源的问题
要写文档了,emmm,先写个文档工具吧——
乘风破浪,遇见最佳跨平台跨终端框架
【Windows版本控制】上海道宁为您提供Vi
available 处理办法
Visual Studio自定义背景图片
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
在vscode中使用R时,用快捷键来快捷键入卡
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型