关于JAVA中动态创建二维数组的“技巧”

2024-08-22 09:38

本文主要是介绍关于JAVA中动态创建二维数组的“技巧”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看似一个非常简单的问题,但是实际却花了我很多时间。

我的目的是,创建一个二维数组str[][],令str[][]   <--  Arraylist<Arraylist<T>>;   //此处T指的int(Integer)类型

首先JAVA中创建二维数组的方法无非两种:

  •  一种是静态的,即已知全部数据,比如要建立3乘3的二维数组,每个数组中的个数,及数组中元素是什么都明确已知,注意,是两者都已知才可以静态赋值,例如 int a[][] = {{1,2,6},{3,4,5,6},{7,8,9}} ;  静态赋值比较简单,在实际中用的也不多,因为用到此处时多为不同类型的转化问题,所以大多信息存在于已知的类型数据中,要转化为二维数组中,必然要动态的按照原类型中的信息重构二维数组,所以新的二维数组可能每个数组中元素个数都不确定,需要动态确定。
  • 动态赋值,也分两种,因为赋值方式除了直接两类型相等外,绝大多数都是通过两层循环,逐个赋值。于是产生了问题,在所需要的二维数组的要求“不高”时,可以直接用形如 int [][]a = new int[3][3]; 来存储,反之则会出错误。上述的“要求”高低,就是说在不确定每个数组长度时,直接用较大的空间去存,就好像 变量 a[] 是一个班的成绩,它是未知的,可以直接用int a[100]来存一样,可能结果只用了100个中的30个,但是也完成了储存或输出的任务。

那么,如果要求是"高"的,意思是,结果二维数组不仅仅完成存储的任务,还要保证每个数组的长度,同原信息保持一致。回到正题,要完成 str[][]   <--  Arraylist<Arraylist<T>>  这一过程,用str[1000][1000]来存简单情况下是没有问题的,但二维数组却丢失了ArrayList中的每个“小链表”的长度 这一重要信息。其结果第一是浪费了空间,第二个很重要的是这个二维数组不能再利用,可能通过限制可以完成输出的任务,但是用于递归嵌套等对每个数组长度有明确要求的时候,str[1000][1000]完全没用。

其实,二维数组的每一维都可以动态创建,这一点很重要,动态第一维的方法:int [][]a = new a[ 第一维数 ][ ];

 然后,在上面一维创建后,同样可以动态第二维:int a[ i ] = new a[ 第二维数 ];

 比如两次循环时,便可以如下操作:

 

          int [ ][ ] arr ;arr = new int [ 一维数 ][ ];    //动态创建第一维for ( i = 0 ; i < 一维数 ; i++ ) {arr [ i ] = new int [ 二维数 ];    //动态创建第二维for( j=0 ; j < 二维数 ; j++) {arr [ i ][ j ] = j; }}
 

由上可完成赋值,结果每个数组个数可能都不相同,即完成了 Arraylist<Arraylist<T>> 给 str[][]  赋值的工作。

 

这篇关于关于JAVA中动态创建二维数组的“技巧”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095912

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏