我想在程序中使用无限的2D数组。我有一个2D数组的代码:
int a[][]=new int[10][10];
但问题是数组是固定长度的,具有行和列值。
答案 0 :(得分:4)
正如Kayaman评论的那样,java中的数组是固定大小,如JLS (§10.3)
中所指定数组创建表达式指定元素类型,嵌套数组的级别数,以及至少一个嵌套级别的数组长度。 数组的长度可用作最终实例可变长度。
你有3个选择,如果你的情况下首先不可能,你应该使用第二个:
使用变量来提供所需的数组extact大小:
int numberOfXElement = // get the elements in dynamic way
int numberOfYElement = // get the elements in dynamic way
int a[][]=new int[numberOfXElement][numberOfYElement];
最佳选择
使用具有动态大小的ArrayList
,您可以添加元素而不需要关注大小(但直到无限,直到Integer.MAX_VALUE
)。
List<List<Integer>> yourList = new ArrayList<ArrayList<Integer>>();
注意:如评论所示,请注意使用Integer
and not int
。
将 Integer.MAX_VALUE
大小赋予数组(但必须小心空位)
如注释中所指出的,语法上是正确的表达式,但是你需要ram内存的音调才能执行它。而不是:
给出一个很大的数字,你在创建时永远不会到达数组,但如果你使用这个选项,你必须小心空位。
int a[][]=new int[8043][8043];
为什么选择8043?我使用快速测试来查看实际机器中的最大堆大小, 2gb RAM ,不关心i
启动哪个值,总是中断(在我的机器中,尝试创建{{ 1}})。
int[8044][8044]
答案 1 :(得分:3)
阵列的大小是固定的。一旦你用一定长度声明它们,你就不能在以后更改它。
您可能希望ArrayList动态增加动态,同时继续添加项目。
如果您正在寻找2D,可以选择ArrayList的ArrayList。
List<List<Integer>> listOfLists = new ArrayList<ArrayList<Integer>>();
如果你不确切地知道为什么我在左侧写了List<List<>>
而不是ArrayList<ArrayList>>
,请参考Type List vs type ArrayList in Java
答案 2 :(得分:1)
不确定是否可以创建流的流,但在Java 8中,您可以拥有无限的流。