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

时间:2013-06-22 03:39:00

标签: java arrays matrix arraylist

这是我的情况,我想为我正在研究的3d项目创建一个矩阵缓冲区。

Stack Overflow上的很多人都在提议做这样的事情

ArrayList<ArrayList<object>>

然而,这种结构导致问题,因为我需要一个固定大小的矩阵,我知道add(i,object)对操作复杂性的影响。另一方面,我的矩阵的最后一个嵌套级别需要具有可变大小,因此如果对象位于相同位置,则只需将其自身添加到堆栈中。

2 个答案:

答案 0 :(得分:2)

如果你需要一个可变长度第三维的矩阵,为什么不做ArrayList [] []?

显然你无法实例化泛型矩阵,但你可以将它从raw-type转换为Object(假设你想要的东西),如下所示:

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

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

答案 1 :(得分:1)

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

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

LinkedList<E>[][] matrix = new LinkedList[length][width];

然后,我会建议实例化所有列表,以防止空指针问题:

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

我确实假设您使用的是Java 7.如果没有,只需在实例化每个元素时将类型(E)放入尖括号中。我希望这有帮助,并有乐趣编码! =)