2011-03-10 79 views
5

我知道,它可以創建一個二維的ArrayList與ArrayList<ArrayList<E>>,但畢竟是累贅和一個真正的噩夢鑄造,當涉及到增加和獲取的對象。是否有任何有效的用於Java的2D ArrayList類?

是否有更有效地做這種事情任何2D的ArrayList類?我從頭開始寫一個真正的2D ArrayList類,我想知道是否有其他人以有效的方式完成了這樣的事情。

+0

你需要更多的效率? – jjnguy 2011-03-10 22:29:21

+0

效率一般。有僞二維ArrayList類使用LinkedLists,嵌套ArrayLists,或只是普通的多維數組,這可能是非常低效的速度和記憶方式。 – 2011-03-10 22:32:26

回答

4

沒有,很不幸,沒有2D ArrayList類。你選擇的選項(萬一Diamension的0/1/2是常數):

MyType[][] myList = new MyType[n][m]; 

ArrayList<MyType>[] myList = new ArrayList<MyType>[n]; 

ArrayList<ArrayList<MyType>> myList = new ArrayList<ArrayList<MyType>>(); 

另一種選擇是保存所有數據在1d ArrayList中創建一個接收(x,y)並返回ArrayList中的位置x的函數。這樣你展示一個二維數組之外,但容易保存元素1D ArrayList中

+0

+1「另一個選項」 – 2013-02-25 22:52:06

1

使用「的ArrayList>」式的做法是爲罰款這種事情從我所看到的非常標準。您可以輕鬆編寫一個2D數組列表類,它提供了添加/刪除項目等的便捷方法,並且使用它遠離「繁瑣」或「鑄造噩夢」。以this實現爲例。它並不完美,但它說明了使用這種方法是多麼容易。

0

Google Collections有一個Table集合。它被設置爲行/列,直接訪問,bycol和行。表的不同實現有基於訪問類型

0

我建了一個3D「網格」數據結構Table實現,如果是任何幫助。

關鍵訣竅是子分隔空間分成使得稀疏數據可以被有效地存儲「塊」。

,如果你忽略z方向(其維持在0)喜歡,雖然這可能是一個有點矯枉過正,你可以使用它作爲一個2D的集合。如果你想要這種結構,還是一個選擇。或者,您可以將其簡化爲2D。

相關問題