这是不好的做法吗?堆叠仿制药
ArrayList<ArrayList<ArrayList<Double>>> list = new ArrayList<ArrayList<ArrayList<Double>>>();
这是不好的做法吗?堆叠仿制药
ArrayList<ArrayList<ArrayList<Double>>> list = new ArrayList<ArrayList<ArrayList<Double>>>();
这不一定是坏习惯。这只是“不可读”。有一点耐心,在即将到来的Java 7中你允许构建参数化类型时,可以省略的克鲁夫特在特定的泛型类型:
List<List<List<Double>>> list = new ArrayList<>();
这就是所谓的type inference。
截至目前,如果你可以用编译器警告过,你也可以只是这样做的:
List<List<List<Double>>> list = new ArrayList();
我想你也可以创建一个看起来像'public static
或只使用Guava的'Lists'类,并用'Lists.newArrayList()'替换构造函数调用。这正是迈克所提出的。 – whiskeysierra 2010-07-14 22:07:58
那么,你需要一个列表,其元素是列表的元素是列表?除非您告诉我们,否则我们不知道您要完成什么。
但是,直接使用ArrayList
而不是List
确实是一种不好的做法。
您绝对是对的,谢谢。不知道为什么我没有做清单开始。 – rhombidodecahedron 2010-07-14 16:30:01
取决于你打算如何使用它。也许你可以封装二维列表并以List<TwoDimensionalList<Double>>
结束。据推测,这将有TwoDimensionalList.get(int i, int j)
等操作获取i
列表中j
位置的元素。
编辑:如果它不是二维列表的列表,而是一个三维列表,那么当然你想要一个ThreeDimensionalList
。 (如果您的列表尺寸是固定的,您可以在内部使用单个数组(列表)来实现此功能,其中元素(i,j,k)
位于i*dim1 + j*dim2 + k*dim3
位置)。
这是一个基于ArrayList的三维矩阵。不好看,但这就是我们必须写的。
另一种可能是:
List<List<List<Double>>> list = new ArrayList<List<List<Double>>>();
这是一个有点短,通常在大多数情况下,你只是在接口中的方法有兴趣的确定。
所以如果你需要一个可调整大小的三维矩阵数据结构,那么这是一个干净的方法。
这可能是一个好主意,创建一个新的类来处理您试图完成的行为。我将创建一个使用私有ArrayList<...>
(赞成继承的委派)的类并创建必要的方法。如果有的话,它应该让事情更容易阅读和理解。
至少,更明确地命名它,类似3dList,会有所帮助。 对我来说,首选的是编写一个2D/3D列表的自定义封装,正如其他人在上面提出的那样。
不错的建议,但在Java中,标识符不能以数字开头。发明更好的东西;) – BalusC 2010-07-14 16:23:58
ThreeDimensionalList? ThreeDList? – whiskeysierra 2010-07-14 22:10:40
肯定。最有可能你的代码更好用double[][][]
这可能是一个更好的选择,如果你打算使用一个三维的双精度数组,因为如果不是稀疏数组,Double对象的ArrayLists的ArrayLists的ArrayList可能会占用更多的空间。 – 2010-07-14 18:56:21
一般而言,你是对的。 Java程序员经常低估对象引入的内存开销。但是,如果您需要矩阵可实时调整大小,并且事先知道尺寸变化很难预先预测,那么您可能需要使用“堆叠或泛型”方法。特别是因为与C不同,数组不能在Java中动态调整大小。 – rtperson 2010-07-14 19:36:04
它让我的头受伤,但据我所知它被认为是可以接受的。 – 2010-07-14 15:08:47
在你的例子中,你如何定义不良习惯? – 2010-07-14 15:09:04
很明显,这是一个不好的做法。 – 2010-07-14 15:17:27