堆叠泛型

时间:2010-07-14 15:06:49

标签: java generics

这是不好的做法吗?

ArrayList<ArrayList<ArrayList<Double>>> list = new ArrayList<ArrayList<ArrayList<Double>>>();

7 个答案:

答案 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列表的自定义封装,正如其他人在上面所建议的那样。