前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于JAVA中动态创建二维数组的技巧

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

作者头像
ZONGLYN
发布2019-08-08 10:58:16
3.5K0
发布2019-08-08 10:58:16
举报
文章被收录于专栏:程序萌部落程序萌部落

(本文年代久远,请谨慎阅读)看似一个非常简单的问题,但是实际却花了我很多时间。我的目的是,创建一个二维数组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[ 第二维数 ];

实现

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

代码语言:javascript
复制
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[][] 赋值的工作。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建二维数组
  • 动态赋值
  • 实现
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档