这是不好的做法吗?
ArrayList<ArrayList<ArrayList<Double>>> list = new ArrayList<ArrayList<ArrayList<Double>>>();
答案 0 :(得分:7)
它是一个基于ArrayList的三维矩阵。看起来不太好,但这就是我们写它的方式。
另一种选择可能是:
List<List<List<Double>>> list = new ArrayList<List<List<Double>>>();
这有点短,通常可以,因为在大多数情况下你只对界面方法感兴趣。
因此,如果您需要可调整大小的三维矩阵数据结构,那么这是一种干净的方法。
答案 1 :(得分:4)
创建一个新类来处理您要完成的行为可能是个好主意。我将创建一个使用私有ArrayList<...>
的类(支持委托而不是继承)并创建必要的方法。如果有的话,它应该使事情更容易阅读和理解。
答案 2 :(得分:4)
这不一定是不好的做法。它只是“不可读”。请耐心等待,在即将推出的Java 7中,您可以在构造参数化类型时省略特定泛型类型中的残缺:
List<List<List<Double>>> list = new ArrayList<>();
这称为type inference。
截至目前,如果您可以使用编译器警告,您也可以这样做:
List<List<List<Double>>> list = new ArrayList();
答案 3 :(得分:3)
是肯定的。最有可能使用double[][][]
答案 4 :(得分:2)
那么,你需要一个List,其元素是列表,其元素是列表吗?除非你告诉我们,否则我们不知道你想要完成什么。
但是,直接使用ArrayList
而不是List
确实是一种不好的做法。
答案 5 :(得分:1)
取决于您打算如何使用它。也许您可以封装二维列表并最终得到List<TwoDimensionalList<Double>>
。据推测,它会有TwoDimensionalList.get(int i, int j)
之类的操作来获取j
列表i
位置的元素。
编辑:如果它不是二维列表的列表,而是三维列表,那么当然你需要一个ThreeDimensionalList
。 (如果你的列表的维度是固定的,你可以在内部使用单个数组(列表)实现它,其中元素(i,j,k)
位于i*dim1 + j*dim2 + k*dim3
位置。)
答案 6 :(得分:0)
至少,更明确地命名它,比如3dList,会有所帮助。 对我来说,首选是编写2D / 3D列表的自定义封装,正如其他人在上面所建议的那样。