我遇到了问题。我需要创建一个数组数组。我已经阅读了一些关于用Java创建动态数组的文章,但我不确定应该选择哪种方式。
第一个是声明每个数组int arr[][][] = new int[10000][10000][10000];
的最大可能大小,但在我的情况下,每个数组的大小取决于另一个数组的大小。我的意思是每个数组都可能有一个max数组的大小,如果我用这种方式声明我的数组数组,它应该占用大量的内存。
方法是使用ArrayList
。但我以前从未使用它,我不知道ListArray
ListArrays
的{{1}}以及ListArray
ListArrays
ListArrays
的语法。此外,我不确定是否应该使用它,因为ListArray
包含对象作为元素,如果我有一个像[10000][100][20]
这样的数组,我的内存使用和其他pc会发生什么资源?..
第三个问题是,在最好的情况下,我希望没有对象或任何其他数据类型变量作为数组的元素,但链接到另一个数组元素的其他元素(我的意思是arr[z][x][y] = @arrOfStr[i]
)。我从来没有在Java中使用链接,我甚至不知道是否可以使用链接作为数组元素,我应该如何声明我的数组。
所以伙计们,我真的需要帮助,因为我已经打破了我的大脑,试图用最少的电脑资源来解决这个问题。
任何帮助表示赞赏!
答案 0 :(得分:1)
免责声明:这可能是一个糟糕的设计,因为它非常罕见的列表必须嵌套这么深,或者根本不需要嵌套。您可能希望将其展平或使用Set
或Map
。我的猜测是Map
,因为你从第三个列表中获得了什么有意义的信息?好吧,如果“第三”是有意义的,那么map.add(3, myInt)
是一种更好的方式来访问它。
尽管如此,语法非常精细,所以这是一个有效的代码示例。
但我以前从未使用它,我不知道声明ListArray的ListArray的语法,还有ListArrays的ListArrays的ListArray。
所以这是你的问题。
List<Integer> array1 = new ArrayList<>(); //java 7 only
List<List<Integer>> array2 = new ArrayList<>();
array2.add(array1);
// ...
等等。
创建10x10x10列表并填充一些数字的示例代码:
List<List<List<Integer>>> list = new ArrayList<>();
int n = 0;
for(int i = 0; i < 10; i++) {
List<List<Integer>> list2 = new ArrayList<>();
list.add(list2);
for(int j = 0; j < 10; j++) {
List<Integer> list3 = new ArrayList();
list2.add(list3);
for(int k = 0; k < 10; k++) {
list3.add(n++);
}
}
}
答案 1 :(得分:0)
更明确 - 做到这一点:
import java.awt.Point;
Point
通常用于图形情况,我怀疑你只需要一对整数。您可以use Apache's immutable point class或自己动手,如果您执行后者,请记住实施hashCode()
。
Map<Point, Integer> map = new Hashmap<>();
那里有一张地图,没有清单。我强烈怀疑你的代码中没有理由你需要一个列表,而你只是想通过它们的坐标来检索它们。