这是我的情况,我想为我正在处理的3d项目创建一个矩阵缓冲区。如何使用ArrayList和Array编写三维矩阵
很多人对堆栈溢出提议做这样
ArrayList<ArrayList<object>>
然而事情这个结构是造成问题,因为我需要一个固定大小的矩阵和我知道的影响是add(i,object)
作为对的复杂性操作。另一方面,我的矩阵的最后一个嵌套层次需要具有可变大小,所以如果对象位于相同位置,它只会将其自身添加到堆栈中。
这是我的情况,我想为我正在处理的3d项目创建一个矩阵缓冲区。如何使用ArrayList和Array编写三维矩阵
很多人对堆栈溢出提议做这样
ArrayList<ArrayList<object>>
然而事情这个结构是造成问题,因为我需要一个固定大小的矩阵和我知道的影响是add(i,object)
作为对的复杂性操作。另一方面,我的矩阵的最后一个嵌套层次需要具有可变大小,所以如果对象位于相同位置,它只会将其自身添加到堆栈中。
如果你需要一个长度可变的第三维矩阵,为什么不做ArrayList [] []?
显然,你不能实例化一个通用的矩阵,但可以从原始类型强制转换为Object(假设这是你想要的)是这样的:
ArrayList<Object>[][] box = (ArrayList<Object>[][])new ArrayList[length][width];
这将导致一个固定大小具有可变长度第三维的矩阵。不过要记住用ArrayList填充矩阵,因为整个矩阵将被填充为null。
可变长度第三维可以由许多不同的集合处理。如果你的第三维真的像一个堆栈(或者甚至是一个Queue/Deque),那么我会使用LinkedList
来处理它,因为它可以从集合的正面/背面添加和移除对象的速度。
为了创建类型的列表E
你可以写的二维矩阵:
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
)到尖括号实例的每个元素时。我希望这可以帮助,并有趣的编码! =)
好铸造听起来像一个可能的解决方案。我目前正在做类似的事情,但我没有投射。我觉得应该有更好的解决办法吗?是不是有一个类似于数组的结构对象? –
与数组(即列表)类似的集合是LinkedList,ArrayList和Vector。 ArrayList优于Vector,并且通常ArrayList比LinkedList具有更快的访问速度,并且使用的内存少得多,所以它通常是您想要的。如果你对这个第三维有更多具体的约束,比如只在前面或后面添加,你可以使用ArrayDeque或Stack,除此之外你真的使用ArrayList。 –