我知道可以使用ArrayList<ArrayList<E>>
创建一个二维ArrayList,但这样做很麻烦,在添加和检索对象时需要进行大量的类型转换。
是否有任何更高效地实现这种操作的二维ArrayList类?我正在从头开始编写一个真正的二维ArrayList类,想知道是否有其他人以高效的方式完成了这种操作。
我知道可以使用ArrayList<ArrayList<E>>
创建一个二维ArrayList,但这样做很麻烦,在添加和检索对象时需要进行大量的类型转换。
是否有任何更高效地实现这种操作的二维ArrayList类?我正在从头开始编写一个真正的二维ArrayList类,想知道是否有其他人以高效的方式完成了这种操作。
很遗憾,目前没有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中保存元素。
我建立了一个3D的“网格”数据结构,如果有帮助的话。
关键技巧是将空间细分为“块”,以便可以高效地存储稀疏数据。Google Collections 提供了一个 Table 集合。它是按行/列布局的,可以直接通过列、行访问。不同实现的 Table 根据访问类型具有不同的效率。