Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ArrayList和Array编程三维矩阵_Java_Arrays_Matrix_Arraylist - Fatal编程技术网

Java 如何使用ArrayList和Array编程三维矩阵

Java 如何使用ArrayList和Array编程三维矩阵,java,arrays,matrix,arraylist,Java,Arrays,Matrix,Arraylist,这是我的例子,我想为我正在进行的3d项目创建一个矩阵缓冲区 堆栈溢出的许多人都建议这样做 ArrayList<ArrayList<object>> ArrayList 但是,由于我需要一个固定大小的矩阵,并且我意识到add(I,object)as对操作复杂性的影响,因此这种结构正在引发问题。另一方面,我的矩阵的最后一个嵌套级别需要具有可变大小,因此如果对象位于同一位置,它只会将其自身添加到堆栈中。如果需要具有可变长度三维矩阵,为什么不使用ArrayList[][ 显然

这是我的例子,我想为我正在进行的3d项目创建一个矩阵缓冲区

堆栈溢出的许多人都建议这样做

ArrayList<ArrayList<object>>
ArrayList

但是,由于我需要一个固定大小的矩阵,并且我意识到
add(I,object)
as对操作复杂性的影响,因此这种结构正在引发问题。另一方面,我的矩阵的最后一个嵌套级别需要具有可变大小,因此如果对象位于同一位置,它只会将其自身添加到堆栈中。

如果需要具有可变长度三维矩阵,为什么不使用ArrayList[][

显然,您不能实例化泛型矩阵,但您可以将其从原始类型转换为对象(假设这是您想要的):

ArrayList<Object>[][] box = (ArrayList<Object>[][])new ArrayList[length][width];
ArrayList[]]box=(ArrayList[][])新的ArrayList[length][width];

这将导致固定大小的矩阵具有可变长度的三维。记住用ArrayList填充矩阵,因为整个矩阵将以null开头。

可变长度的三维可以由许多不同的集合处理。如果你的三维空间真的像一个堆栈(甚至是一个队列/Deque),那么我会使用
LinkedList
来处理它,因为它可以快速地从集合的前面/后面添加和删除对象

为了创建
E
类型列表的2D矩阵,您可以编写:

LinkedList<E>[][] matrix = new LinkedList[length][width];
LinkedList[][]矩阵=新LinkedList[长度][宽度];
之后,我建议像这样实例化所有列表,以防止空指针问题:

for(int i = 0; i < matrix.length; i++)
    for(int j = 0; j < matrix[0].length; j++)
        matrix[i][j] = new LinkedList<>();
for(int i=0;i

我确实假设您使用的是Java7。如果不是,在实例化每个元素时,只需将类型(
E
)放在尖括号中即可。我希望这能有所帮助,并享受编码的乐趣!=)

好的,铸造听起来是一个可能的解决方案。我现在也在做类似的事情,但我不是演员。我觉得应该有更好的解决办法不?没有任何Collection对象具有与数组类似的结构吗?与数组(即列表)类似的集合有LinkedList、ArrayList和Vector。ArrayList比Vector更可取,而且通常ArrayList的访问速度比LinkedList快得多,占用的内存也少得多,所以它通常是您想要的。如果您对此第三维有更具体的约束,例如仅在前面或后面添加,则除了使用ArrayList之外,还可以使用ArrayQue或堆栈。