有没有适用于Java的高效2D ArrayList类?

6

我知道可以使用ArrayList<ArrayList<E>>创建一个二维ArrayList,但这样做很麻烦,在添加和检索对象时需要进行大量的类型转换。

是否有任何更高效地实现这种操作的二维ArrayList类?我正在从头开始编写一个真正的二维ArrayList类,想知道是否有其他人以高效的方式完成了这种操作。


你需要在哪方面提高效率? - jjnguy
一般而言,效率很重要。有些伪2D ArrayList类使用LinkedLists、嵌套ArrayLists或者普通的多维数组,这些可能在速度和内存方面非常低效。 - Nick Anderegg
5个回答

5

很遗憾,目前没有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>>();

另一种选择是将所有数据保存在1维ArrayList中,并创建一个函数,接收(x,y)并返回ArrayList中x的位置。这样,您可以在2D数组之外进行演示,但轻松地在1D ArrayList中保存元素。


1
使用“ArrayList>”类型的方法是很好的,从我所见,这种方法非常标准。您可以轻松编写一个2D数组列表类,为添加/删除项目等提供方便的方法,使用起来不会很“笨重”或“转换困难”。可以参考this实现作为示例。它并不完美,但它说明了使用这种方法有多容易。

1

链接已经失效,请提供正确的链接。 - Tinus Jackson

0

我建立了一个3D的“网格”数据结构,如果有帮助的话。

关键技巧是将空间细分为“块”,以便可以高效地存储稀疏数据。
如果您愿意,可以将其用作2D集合,忽略z维度(保持为0),尽管这可能有点过度。但如果您想要这种结构,这仍然是一个选项。或者,您可以将其简化为2D。

0

Google Collections 提供了一个 Table 集合。它是按行/列布局的,可以直接通过列、行访问。不同实现的 Table 根据访问类型具有不同的效率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接