专栏首页三言两语关于JAVA中动态创建二维数组的技巧

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

(本文年代久远,请谨慎阅读)看似一个非常简单的问题,但是实际却花了我很多时间。我的目的是,创建一个二维数组str[][],令 str[][] <-- Arraylist<Arraylist<T>> //此处T指的int(Integer)类型

创建二维数组

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

一种是静态的,即已知全部数据,比如要建立3乘3的二维数组,每个数组中的个数,及数组中元素是什么都明确已知,注意,是两者都已知才可以静态赋值,例如

1

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[][] 赋值的工作。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Servlet3.0 模块化

    前言:原本一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差,因此Servlet 3.0可以将每个Servl...

    王念博客
  • 转发和重定向又是什么“垃圾”——教你再分类

             前言:之前写了几篇JSP的博客,现在又回过头来看Servlet,温故而知新,再回顾回顾,总会有收获的。以前学习Servlet感觉内容很多,现在...

    泰斗贤若如
  • 性能测试中的常见异常分析(转载整理)

    java.lang.OutOfMemoryError: Java heap space 原因:java堆内存不够或者程序中有死循环; 解决:如果是java堆内...

    飞天小子
  • Dubbo使用jsr303框架hibernate-validator遇到 ConstraintDescriptorImpl could not be instantiated

    Dubbo可以集成jsr303标准规范的验证框架,作为验证框架不二人选的hibernate-validator是大家都会经常在项目中使用的,但是在Dubbo使用...

    王念博客
  • 哥们,B/S了解吗?——啥玩意,我是敲代码的

    前言:。。。。。。“学好长时间编程了,JavaSE学完了,前端也简单学了”。。。。。“那你学这么多,讲讲B/S吧”。。。。。。“B/S?这是个啥玩意?没听过”。...

    泰斗贤若如
  • SpringBoot之springfox(Swagger) spring-boot-starter-swagger

    Springfox的前身是swagger-springmvc,是一个开源的API doc框架,可以将我们的Controller的方法以文档的形式展现,基于Swa...

    王念博客
  • SpringBoot之logback配置

    日志对于应用程序来说是非常重要的,Spring框架本身集成了不少其他工具,我们自身的应用也会使用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Lo...

    王念博客
  • 用Java的方式模拟Flutter的Widget的实现(多层括号嵌套)

    Flutter最重要的是Widget,首先我们来写一个类Widget,然后有一个build函数。如下所示:

    AWeiLoveAndroid
  • protoc 编译工具

    在进行开发 protoc 之前,你需要首先在你的计算机中安装 protoc 编译工具。

    HoneyMoose
  • 使用mybatis-generator 插件自动生成实体,Dao,Mapper

    前言:之前一直使用jpa,不用写增删改查的方法,用entityManager封装一套复合查询的方法写sql也是很灵活。之前有用springboot集成mybat...

    王念博客

扫码关注云+社区

领取腾讯云代金券