(本文年代久远,请谨慎阅读)看似一个非常简单的问题,但是实际却花了我很多时间。我的目的是,创建一个二维数组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个,但是也完成了储存或输出的任务。
<< 更多精彩尽在『程序萌部落』>>
<< https://www.cxmoe.com >>
那么,如果要求是”高”的,意思是,结果二维数组不仅仅完成存储的任务,还要保证每个数组的长度,同原信息保持一致。回到正题,要完成 str[][] <-- Arraylist<Arraylist<T>>
这一过程,用str[1000][1000]来存简单情况下是没有问题的,但二维数组却丢失了ArrayList中的每个“小链表”的长度 这一重要信息。其结果第一是浪费了空间,第二个很重要的是这个二维数组不能再利用,可能通过限制可以完成输出的任务,但是用于递归嵌套等对每个数组长度有明确要求的时候,str[1000][1000]完全没用。
其实,二维数组的每一维都可以动态创建,这一点很重要,动态第一维的方法:int [][]a = new a[第一维数][];
然后,在上面一维创建后,同样可以动态第二维:int a[ i ] = new a[ 第二维数 ];
实现
比如两次循环时,便可以如下操作:
1 | int [][] arr ; |
由上可完成赋值,结果每个数组个数可能都不相同,即完成了Arraylist<Arraylist<T>>
给 str[][] 赋值的工作。
😒 留下您对该文章的评价 😄