Java二维数组与稀疏数组相互转换实现详解

Java二维数组与稀疏数组相互转换实现详解

二维数组与稀疏数组在Java中是常见的数据结构,二维数组用来表示二维网格数据,稀疏数组用来表示大部分元素都是相同值的数组。本篇攻略将详细讲解Java中如何实现二维数组与稀疏数组的相互转换。

1. 二维数组转稀疏数组

实现过程:
1. 遍历二维数组,统计非零元素的个数count。
2. 创建一个稀疏数组sparseArray,它包含count+1行,3列,第一行记录原二位数组的行数、列数和非零元素的个数,后面count行记录非零元素在原二维数组中的行列及其值。
3. 遍历二维数组,将非零元素放入稀疏数组中。

示例1:

// 原二维数组arr
int[][] arr = {
  {0, 1, 0},
  {2, 0, 0},
  {0, 0, 3}
};
// 打印原二维数组
System.out.println("原二维数组:");
for (int[] row : arr) {
  for (int element : row) {
    System.out.print(element + "\t");
  }
  System.out.println();
}

// 转化为稀疏数组sparseArray
int count = 0;
for (int[] row : arr) {
  for (int element : row) {
    if (element != 0) {
      count++;
    }
  }
}

int[][] sparseArray = new int[count+1][3];
sparseArray[0][0] = arr.length;
sparseArray[0][1] = arr[0].length;
sparseArray[0][2] = count;

int index = 1;
for (int i = 0; i < arr.length; i++) {
  for (int j = 0; j < arr[0].length; j++) {
    if (arr[i][j] != 0) {
      sparseArray[index][0] = i;
      sparseArray[index][1] = j;
      sparseArray[index][2] = arr[i][j];
      index++;
    }
  }
}
// 打印稀疏数组
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
  for (int element : row) {
    System.out.print(element + "\t");
  }
  System.out.println();
}

示例2:

// 原二维数组arr
int[][] arr = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 0}
};
// 打印原二维数组
System.out.println("原二维数组:");
for (int[] row : arr) {
  for (int element : row) {
    System.out.print(element + "\t");
  }
  System.out.println();
}

// 转化为稀疏数组sparseArray
int count = 0;
for (int[] row : arr) {
  for (int element : row) {
    if (element != 0) {
      count++;
    }
  }
}

int[][] sparseArray = new int[count+1][3];
sparseArray[0][0] = arr.length;
sparseArray[0][1] = arr[0].length;
sparseArray[0][2] = count;

int index = 1;
for (int i = 0; i < arr.length; i++) {
  for (int j = 0; j < arr[0].length; j++) {
    if (arr[i][j] != 0) {
      sparseArray[index][0] = i;
      sparseArray[index][1] = j;
      sparseArray[index][2] = arr[i][j];
      index++;
    }
  }
}
// 打印稀疏数组
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
  for (int element : row) {
    System.out.print(element + "\t");
  }
  System.out.println();
}

2. 稀疏数组转二维数组

实现过程:
1. 读取稀疏数组第一行,获取原二维数组的行数、列数和非零元素的个数。
2. 创建一个二维数组arr,它的行数和列数分别为稀疏数组第一行中的行数和列数。
3. 遍历稀疏数组除第一行外的行,将非零元素放入二维数组中。

示例1:

// 稀疏数组sparseArray
int[][] sparseArray = {
  {3, 3, 2},
  {0, 1, 1},
  {2, 2, 3}
};
// 打印稀疏数组
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
  for (int element : row) {
    System.out.print(element + "\t");
  }
  System.out.println();
}

// 转化为二维数组arr
int[][] arr = new int[sparseArray[0][0]][sparseArray[0][1]];

for (int i = 1; i < sparseArray.length; i++) {
  arr[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
// 打印二维数组
System.out.println("二维数组:");
for (int[] row : arr) {
  for (int element : row) {
    System.out.print(element + "\t");
  }
  System.out.println();
}

示例2:

// 稀疏数组sparseArray
int[][] sparseArray = {
  {3, 3, 3},
  {0, 0, 1},
  {0, 1, 2},
  {1, 2, 3}
};
// 打印稀疏数组
System.out.println("稀疏数组:");
for (int[] row : sparseArray) {
  for (int element : row) {
    System.out.print(element + "\t");
  }
  System.out.println();
}

// 转化为二维数组arr
int[][] arr = new int[sparseArray[0][0]][sparseArray[0][1]];

for (int i = 1; i < sparseArray.length; i++) {
  arr[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
// 打印二维数组
System.out.println("二维数组:");
for (int[] row : arr) {
  for (int element : row) {
    System.out.print(element + "\t");
  }
  System.out.println();
}

以上就是Java二维数组与稀疏数组相互转换的详细实现攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java二维数组与稀疏数组相互转换实现详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java实现英文句子中的单词顺序逆序输出的方法

    Java实现英文句子中的单词顺序逆序输出的方法 问题描述 如何实现逆序输出英文句子中的单词顺序? 解决方案 思路 我们可以将英文句子中的所有单词转换为一个字符串数组,然后将该数组中的每一个单词逆序输出即可。 具体实现思路如下: 定义一个字符串变量,用于存储英文句子。 将英文句子按空格分割成字符串数组。 遍历字符串数组,将每一个单词逆序输出。 将逆序后的单词连…

    Java 2023年5月26日
    00
  • JavaWeb动态导出Excel可弹出下载

    引言: 在JavaWeb开发过程中,有时候需要将数据库中的数据导出为Excel文件,然后让用户可以进行下载。而且,下载的过程中需要提供一些提示信息,如下载进度、下载成功等信息。本文将详细介绍如何使用JavaWeb动态导出Excel并实现弹出下载的效果。 步骤: 1.创建Excel文件 我们可以使用Apache POI来创建Excel文件,这里就不过多介绍了,…

    Java 2023年6月15日
    00
  • mysql-connector-java与mysql版本的对应关系说明

    MySQL Connector/J 是MySQL提供的一个JDBC驱动程序,可以用来连接Java程序和MySQL数据库。不同版本的MySQL Connector/J与不同版本的MySQL数据库具有不同的兼容性,下面是针对不同版本的mysql-connector-java和MySQL数据库兼容性的说明。 MySQL Connector/J 8.0与MySQL版…

    Java 2023年5月20日
    00
  • 微信小程序 wx.request(接口调用方式)详解及实例

    下面是微信小程序 wx.request(接口调用方式)详解及实例攻略。 什么是 wx.request 在微信小程序中,我们经常需要请求服务器接口来获取数据,这就需要用到 wx.request 这个接口。 wx.request 是微信小程序中提供的一个用于发起 HTTP 请求的 API 接口,可以用于请求服务器接口、上传文件、下载文件等各种场景。 使用 wx.…

    Java 2023年5月23日
    00
  • SpringBoot中web模板渲染的实现

    Spring Boot中Web模板渲染的实现 1. 什么是Web模板渲染? Web模板渲染是指将动态数据和静态模板文件结合起来,生成最终的HTML页面的过程。在Spring Boot中,我们可以使用多种模板引擎来实现Web模板渲染,例如Thymeleaf、FreeMarker、Velocity等。 2. Spring Boot中Web模板渲染的实现 在Spr…

    Java 2023年5月18日
    00
  • IE脚本错误怎么办 网页脚本错误解决妙招

    为了解决IE浏览器的脚本错误问题,我们需要执行以下几个步骤: 第一步:定位错误 当IE浏览器打开网页时,如果遇到脚本错误,通常会出现一个弹窗提示,里面会显示错误的行号和错误信息。我们可以利用这些信息来定位错误。 第二步:检查代码 定位到错误后,我们需要仔细检查代码,找出错误的原因。通常情况下,脚本错误可能是由于变量未声明、语法问题、DOM元素不存在等原因导致…

    Java 2023年5月23日
    00
  • SpringBoot是如何使用SQL数据库的?

    Spring Boot是一个基于Spring框架的快速开发框架,它可以帮助我们快速构建Web应用程序。在Spring Boot中,我们可以使用多种方式来使用SQL数据库。以下是两种常见的方式: 1. 使用Spring Data JPA Spring Data JPA是一种基于JPA的数据访问框架,它可以帮助我们快速构建数据访问层。以下是一个示例: 添加依赖 …

    Java 2023年5月14日
    00
  • 详解log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析

    详解log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析 背景介绍 log4j-over-slf4j与slf4j-log4j12都是Java中的一种日志框架,它们各自有不同的功能和用法。但是,当同时使用这两种框架的时候,可能会导致Stack Overflow异常的出现,影响系统的稳定性。因此,在深入了解这两种框…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部