传统的数组创建
在java中我们都知道创建简单数组较为简单,和C很相似。如下是创建1、2、3维数组的代码。
int [] array = new int[5];
int [][] array = new int[5][5];
int [][][] array = new int[5][5][5];但是作为传统数组都拥有一个共同的缺陷,那就是申请出来的数组长度都是固定的,不能改变。这就导致我们在不知道需要的空间大小的时往往很为难。
传统的解决办法是:设置一个数组长度不可能突破的上界(通常声明为常数),将该常数作为要申请的数组大小,勉强可以满足使用。
但是这种办法却有局限性,就是当你不能确定上界的时候,你的数组有很大可能越界,另外多余的空间也是一种内存的浪费。
所以我们需要一种更加有效的解决方案,那就是——变长数组。
变长数组
变长数组,顾名思义,就是长度可变的数组。首先需要注意一点,这里说的变长数组不是指用变量来指定数组长度(如下所示)。这种方法只能本质上并不能算变长。因为当执行这句代码的时候,该数组被申请出来,数组长度为n当时的值。一旦被申请数组空间便不能再改变,也就是说此后n再改变,数组长度也不会再改变。所以本质来说它的数组长度并不可变。
int [] array = new int[n];那么究竟如何创建变长数组呢?其实,java早就为我们准备了一系列专门用来存储数据的数据结构,即java.util库中的容器类,包括List、Set、Map及它们的子类。这些ADT几乎可以满足我们所有的存储需要,其中,**变长数组就可以由List类进行实现。**具体声明如下:
List<Integer> array = new ArrayList<Integer>();那么可能有些同学又会问了,这个可以实现二维以上的边长数组吗?当然可以!之所以说java系统库提供的那几个ADT就可以满足我们的所有需要,一方面是因为它们基础,另一方面就是它们之间可以进行组合嵌套,组合嵌套之后它们就可以进一步表示更多更复杂的数据结构了!所以我们通过对List进行嵌套就能得到变长的多维数组了,下面就是变长的二维数组和三维数组申请实例:
List<List<Integer>> array = new ArrayList<List<Integer>>();
List<List<List<Integer>>> array = new ArrayList<List<List<Integer>>>();
















