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日

相关文章

  • Spring Data Jpa返回自定义对象的3种方法实例

    下面就为大家详细介绍如何使用Spring Data JPA返回自定义对象的三种方法。 1. 使用构造函数返回自定义对象 我们可以在自定义的Repository接口中,编写返回自定义对象的方法,并在其方法名上使用@Query注解来编写自定义的SQL语句,例如: @Repository public interface UserRepository extend…

    Java 2023年5月20日
    00
  • struts2过滤器和拦截器的区别分析

    针对网站的访问安全问题,很多网站采取了过滤器和拦截器的方法来进行控制,而在struts2框架中也存在两种安全控制机制:过滤器(Filter)和拦截器(Interceptor)。下面,我将从以下几个方面对这两种机制进行分析,希望对你有所帮助。 过滤器(Filter)和拦截器(Interceptor)的概念 过滤器(Filter)是一种Servlet技术,可以拦…

    Java 2023年5月20日
    00
  • 关于Java跨域Json字符转类对象的方法示例

    下面我就针对“关于Java跨域Json字符转类对象的方法示例”的完整攻略,进行详细讲解,希望能够帮助到你。 1. 什么是跨域? 首先,我们需要明白什么是跨域。跨域是指在同一个浏览器中,一个网站的JavaScript代码试图去访问另一个网站的代码。 在Web安全领域中,浏览器出于安全考虑,禁止页面中的JavaScript代码访问其它域下的资源,包括Cookie…

    Java 2023年5月26日
    00
  • 如何在jsp界面中插入图片

    在JSP界面中插入图片,可以使用HTML标签来实现。下面是详细的步骤: 1. 在JSP页面中使用标签 在JSP页面中,使用以下代码追加标签到对应的位置: <img src="图片地址"> 其中,src属性指定了图片的路径。图片可以是相对路径或者绝对路径。如: 相对路径: <img src="../assets/…

    Java 2023年6月15日
    00
  • Mybatis查询语句结果集的总结大全

    针对“Mybatis查询语句结果集的总结大全”的完整攻略,我将为您提供详细的讲解。以下是整个攻略的步骤: 1. 前言 在讲解Mybatis查询语句结果集之前,我们先了解两个概念: Statement:在JDBC中,Statement接口是用于执行静态SQL语句并返回其结果的主要对象之一。Statement接口可以理解为需要我们自己手动编写SQL语句并执行的方…

    Java 2023年5月20日
    00
  • Java后端Tomcat实现WebSocket实例教程

    Java后端Tomcat实现WebSocket实例教程 WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket允许服务器端和客户端之间的数据实时交换。它被设计成一种通用的解决方案,可以执行不需要长时间等待的双向数据传输。 实现步骤 步骤1:创建WebSocket处理类 创建一个实现javax.websock…

    Java 2023年5月19日
    00
  • vs怎么编写java Script项目? VisualStudio创建java Script文件的技巧

    下面是关于如何在 Visual Studio 中编写 JavaScript 项目的攻略。 Visual Studio 创建 JavaScript 项目 首先,打开 Visual Studio,选择“创建新项目”(New Project),然后在弹出的“新建项目”对话框中,选择“JavaScript”类别,然后选择“空白 Node.js Web 应用程序”模板…

    Java 2023年5月26日
    00
  • 解决get请求入参@NotNull验证不生效问题

    针对“解决get请求入参@NotNull验证不生效问题”的问题,我们可以采取以下步骤进行解决。 引入相关依赖 首先,在 pom.xml 文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b…

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