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可读取整个文件或一部分,但这有时效率较低。在本文中,我们将讨论如何使用Java高效地读取大文件。 1. 读取整个大文件 对于小文件,可以使用Files.readAllBytes(path)或Files.readAllLines(path)一次性读取整个文件。但是,对于大文件,这种方式可能会导致内存不足。…

    Java 2023年5月20日
    00
  • 详解批处理框架之Spring Batch

    详解批处理框架之Spring Batch 什么是Spring Batch Spring Batch是一个开源的批处理框架,它提供了大量的API,用于处理复杂的批处理任务。Spring Batch可以让程序员集中精力编写业务逻辑,而不必考虑如何处理批处理的细节。Spring Batch 支持事务、并发处理、监控、重启、跳过、跟踪、记录、日志等特性,是一个强大的…

    Java 2023年5月19日
    00
  • Java实现excel表格转成json的方法

    下面是详细讲解“Java实现excel表格转成json的方法”的完整攻略。 第一步:导入依赖 使用Java实现excel表格转成json,我们需要用到以下两个依赖: jackson:Java的JSON处理库 poi:操作Excel表格的Java库 <dependencies> <dependency> <groupId>c…

    Java 2023年5月26日
    00
  • 使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析

    使用Log4j为项目配置日志输出应用详解以及实现分析 介绍 日志是软件开发中不可或缺的一个环节,能够对应用运行过程进行记录、分析和监控。Apache Log4j是Java中一个常用的日志框架,可以灵活地进行配置和使用。本攻略将对Log4j的使用进行详细讲解,并提供两个示例实现演示。 Log4j的配置 在项目中使用Log4j需要进行相关配置,一般包括三个方面:…

    Java 2023年5月26日
    00
  • java实现文件上传下载功能

    实现文件上传下载功能是一个常见的需求,Java 语言提供了多种方案可以实现该功能,本文将介绍使用 JavaWeb 中的 Servlet、JSP、File API 和 Apache Commons FileUpload 组件来实现文件上传下载功能的完整攻略。 上传文件 一、表单设计 表单需要有一个文件上传类型的 input: <form action=&…

    Java 2023年5月19日
    00
  • Jaspersoft Studio添加mysql数据库配置步骤

    下面我来详细讲解“Jaspersoft Studio添加mysql数据库配置步骤”的完整攻略,过程中我将会包含两条示例说明。 1. 下载MySQL JDBC驱动程序 Jaspersoft Studio需要通过JDBC连接到MySQL数据库,因此需要下载MySQL JDBC驱动程序。在MySQL官网下载页面(https://dev.mysql.com/down…

    Java 2023年6月16日
    00
  • Android解析json数据示例代码(三种方式)

    下面我来为您提供关于“Android解析json数据示例代码(三种方式)”的完整攻略。 Android解析json数据示例代码(三种方式) 在 Android 应用开发中,我们需要经常与后端 API 接口进行数据交互,并解析 JSON 格式的数据。本文将介绍三种常用的 Android 解析 JSON 数据的方法。 GSON GSON 是 Google 推出的…

    Java 2023年5月26日
    00
  • jsp要实现屏蔽退格键问题探讨

    为了实现在JSP页面中屏蔽退格键,我们需要进行以下步骤: 1. 绑定onkeydown事件 在需要进行屏蔽退格键的input元素上,绑定onkeydown事件,具体方式为在输入框的标签上添加onkeydown属性,并赋值一个javascript回调函数。以下是示例代码: <input type="text" name="u…

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