這是不好的做法嗎?堆疊仿製藥
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