一、概述

  1、概念

  

  2、处理方法

  

  3、示例

  原数组如下:

  

  转换为稀疏数组如下:

  

二、代码

  1、主方法

@Test
public void SparseTest() {
// 创建一个原始的二维数组 11 * 11
// 0: 表示没有棋子, 1 表示 黑子 2 表蓝子
int[][] arr = new int[11][11];
arr[1][1] = 1;
arr[2][3] = 2;
arr[4][5] = 2;
System.out.println("原始数组");
for (int[] tmp:arr) {
for ( int t : tmp) {
System.out.printf("%d\t",t);
}
System.out.println();
} int[][] sparseArr=ArrayToSparse(arr);
//1.0输出稀疏数组
System.out.println("输出稀疏数组");
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
System.out.println();
}
//2.0 将系数数组写入文件
WriteSparseToFile(sparseArr,"xishu.txt"); //3.0从文件中读出稀疏数组
System.out.println("从文件中读出稀疏数组");
int[][] readFileArray = ReadFileToArray("xishu.txt");
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
System.out.println();
}
//4.0从文件中读出稀疏数组,恢复成原来数组
System.out.println("恢复出来的二维数组");
int[][] ints = SparseToArray(readFileArray);
for (int[] tmp:ints) {
for ( int t : tmp) {
System.out.printf("%d\t",t);
}
System.out.println();
}
}

  2、实现数组转稀疏数组 

  //将数组转换为稀疏数组
public int[][] ArrayToSparse(int[][] arr){
//将二维数组转换为稀疏数组
//1.0 遍历得到非零个数
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if(arr[i][j]!=0)
sum++;
}
}
//2.0创建稀疏数组
int[][] sparseArr = new int[sum+1][3];
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2] =sum; int count = 0;
//3.0遍历 填充稀疏数组非零元素
for (int i = 0; i < 11; i++) {
for (int j = 0; j <11 ; j++) {
if(arr[i][j]!=0){
++count;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=arr[i][j];
}
}
} return sparseArr;
}

   3、将稀疏数组写入文件

  

 public void WriteSparseToFile(int[][] sparseArr,String fileName){
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw = new FileWriter(new File(fileName));
bw = new BufferedWriter(fw);
for (int i = 0; i < sparseArr.length; i++) { String tmpStr ="";
for (int j = 0; j <sparseArr[i].length ; j++) {
tmpStr+=sparseArr[i][j]+" ";
}
tmpStr+="\r\n";
bw.write(tmpStr);
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bw!=null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
}

   4、从文件中读出稀疏数组

  

 public int[][] ReadFileToArray(String fileName){
FileReader fr = null;
BufferedReader br = null;
int[][] readArray={};
try {
fr = new FileReader(new File(fileName));
br = new BufferedReader(fr); String lineStr="";
ArrayList<String> list = new ArrayList<>();
try {
while ((lineStr= br.readLine())!=null){
list.add(lineStr);
}
readArray = new int[list.size()][list.get(0).length()];
for (int i = 0;i<list.size() ; i++) {
String[] c = list.get(i).split(" ");
for (int j = 0; j <c.length ; j++) {
readArray[i][j]=Integer.parseInt(c[j]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return readArray;
} }

   5、稀疏数组转数组

  //将稀疏数组转换为数组
public int[][] SparseToArray(int[][] sparseArr){
//将稀疏数组恢复成数组
//1.0先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
int[][] arr = new int[sparseArr[0][0]][sparseArr[0][1]];
//2.0在读取稀疏数组后几行的数据(从第二行开始),并赋给 原始的二维数组 即可
for (int i = 1; i <sparseArr.length ; i++) {
arr[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
} return arr;
}

  

三、运行结果

  

  

  

Java稀疏数组的更多相关文章

  1. Java.稀疏数组

    package array; public class demo06 { public static void main(String[] args) { //创建一个二维数组 11*11 int[] ...

  2. 数据结构与算法之java语言实现(一):稀疏数组

    一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...

  3. 图解Java数据结构之稀疏数组

    在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的.可见算法的重要性. 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础. 我在大学的时候,学校里的数据结构是用C语言教的,因为对 ...

  4. 【学习总结】java数据结构和算法-第三章-稀疏数组和队列

    相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...

  5. java算法--稀疏数组

    数据结构必要知识 线性结构 线性结构是最常用的数据结构,数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是 ...

  6. Java数组声明创建和使用以及多维数组、Arrays类、稀疏数组

    目录 数组概述 数组声明创建 内存分析 java内存分析 堆 栈 方法区 三种初始化 静态初始化 动态初始化 数组的默认初始化 数组的四个基本特点 数组边界 小结: 数组使用 数组基础使用 For E ...

  7. Java的稀疏数组的简单代码实现

    目录 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 二.稀疏数组的Java代码实现思路 三.稀释数组的Java代码实现 四.结语 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 ...

  8. 数据结构(1):稀疏数组使用java实现

    主要是用于数组压缩,去除无效的数组内容: 原数组内容: 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 转换成 稀疏数组 5 5 2 1 1 1 2 ...

  9. java基础——多维数组和稀疏数组

    多维数组 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组 而且数组 int a[][]= new int[2][3]; public class Arr ...

随机推荐

  1. ES6——面向对象-基础

    面向对象原来写法 类和构造函数一样 属性和方法分开写的 // 老版本 function User(name, pass) { this.name = name this.pass = pass } U ...

  2. 用jquery制作的简单轮播图

    我也是进入H5前端的小菜鸟一枚,最近才进入jquery的学习,所以打算对自己的学习进行记录. 今天分享的是一个简单的轮播图,这个轮播图的特效很简单,能够进行图片的轮播以及点击相应图片,图片能够跳转到相 ...

  3. linux中的一些常用命令

    shutdown -h now 现在马上关机 shutdown -r now 现在重新启动 reboot 现在重新启动 su - 如果当前是普通用户,则输入这条命令切换到管理员用户(root),如果要 ...

  4. React-请求篇

    请求方式: (1)后台API:HttpPost   [FromForm] UserRetisterDTO dto 前端请求: { body:qs.stringify(dto),      header ...

  5. tf.clip_by_global_norm

    首先明白这个事干嘛的,在我们做求导的时候,会遇到一种情况,求导函数突然变得特别陡峭,是不是意味着下一步的进行会远远高于正常值,这个函数的意义在于,在突然变得陡峭的求导函数中,加上一些判定,如果过于陡峭 ...

  6. python常用模块学习1

    import time time.sleep(1)#暂停时间 time.time()#显示当前系统时间戳 t=time.localtime()#结构化当地时间,可以将结构化时间想象成一个类 print ...

  7. 《Android程序设计》课程学习

    一.课件内容 2019-2010-1学期课件,点击查看 二.作业相关 上交作业的方法 访问ftp://192.168.42.254:22,登录后找到自己的姓名文件夹,放入作业即可.登录账号为stu2, ...

  8. LeetCode--049--字母异位词分组(java)

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  9. dubbo-go 中的 TPS Limit 设计与实现

    前言 Apache Dubbo 是由阿里开源的一个RPC框架,除了基本的 RPC 功能以外,还提供了一整套的服务治理相关功能.目前它已经是 Apache 基金会下的顶级项目. 而 dubbo-go 则 ...

  10. 使用 Visual Studio 调试器附加到运行的进程

    为什么调试附加进程? Visual Studio 调试器可以附加到在 Visual Studio 外运行的进程. 可以使用此附加功能执行以下操作: 调试并非在 Visual Studio 中创建的应用 ...