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

yizhihongxing

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中,我们可以使用FileInputStream或BufferedInputStream类来读取文件。对于二进制文件可以直接用FileInputStream,对于文本文件最好使用BufferedInputStream。 FileInputStream…

    Java 2023年5月20日
    00
  • 根据ID填充文本框的实例代码

    下面我会给您详细讲解如何根据ID填充文本框的实例代码,包括代码和步骤: 步骤1:HTML模板 首先,我们需要准备一个HTML模板,包含一个文本框和一个按钮。该文本框将用于显示根据ID填充的结果。示例代码如下: <form> <input type="text" id="myText"> <…

    Java 2023年5月20日
    00
  • 如何配置类路径?

    以下是关于如何配置类路径的完整使用攻略: 什么是类路径? Java程序在运行时需要加载类文件,而类文件的位置就是通过类路径来指定的。类路径可以包含多个路径,每个路径之间使用分隔符(如冒号或分号)分隔。类路径可以包含目录和JAR文件。 如何配置类路径? 下面介绍三种常见的配置类路径的方法。 方法一:使用命令行参数设置类路径 可以通过命令行参数设置类路径。例如,…

    Java 2023年5月12日
    00
  • jdbc操作mysql数据库实例

    一、前言 Java Database Connectivity(JDBC)是Java提供的一种操作各种关系型数据库的API。本攻略将介绍如何使用JDBC操作MySQL数据库,包括连接MySQL数据库、创建表、插入记录、查询记录、更新记录和删除记录等操作。 二、依赖和环境需求 在开始实践之前,我们需要准备以下依赖和环境: MySQL数据库(可以是本地安装的,也…

    Java 2023年6月16日
    00
  • Struts1简介和入门_动力节点Java学院整理

    Struts1简介和入门攻略 什么是Struts1 Struts1是一个基于MVC设计模式的开源Web应用框架,可以快速构建基于Java EE的Web应用程序。它的主要组成部分包括Action、Form、Configuration、RequestProcessor等。 Struts1的优点 开源免费,社区支持活跃 遵循MVC设计模式,易于维护和扩展 可以快速…

    Java 2023年5月20日
    00
  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    先介绍一下Java生成验证码的基本流程: 随机生成字符或数字。 使用随机字体样式和大小。 创建画布,设置画布大小、背景色和边框。 在画布上绘制字符和干扰线等图形。 输出验证码图片。 下面我们来看一个完整的Java随机生成验证码的代码示例: package com.example; import java.awt.Color; import java.awt.…

    Java 2023年6月15日
    00
  • 小程序实现带年月选取效果的日历

    下面是关于小程序实现带年月选取效果的日历的完整攻略: 一、实现思路 获取当前日期的年和月以及当月的天数; 使用数据渲染模板,并在相应的日期上添加样式; 实现滑动切换月份功能; 添加点击事件,实现从日历中选择日期并将该日期传递给父组件。 二、具体实现 下面我们将通过两个示例来说明具体实现步骤。 示例一 首先,我们需要在 wxml 文件中编写日历的结构,并通过 …

    Java 2023年5月23日
    00
  • 什么是Java诊断工具?

    Java诊断工具可用于检测、分析和调试Java应用程序的性能和瓶颈。它们被广泛用于Java开发和维护中,以发现问题并提高系统性能。下面是Java诊断工具的详细使用攻略,包括两个示例说明: 什么是Java诊断工具? Java诊断工具是一组开发工具,可用于调试和优化Java应用程序的性能。它们可用于收集各种数据和指标,并提供有关应用程序的详细性能信息。Java诊…

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