2011-03-10 37 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。

相关问题