多维数组的替代数据结构

int*_*man 1 java arrays performance 2d multidimensional-array

我有一个简单的问题,我正在开发一个项目,需要一个具有id和ax,y坐标的对象.这都存储在一个对象中,其想法是将它放入一个2D数组中.但是,有可能创建和存储大量对象,并且阵列的大小可能很大.是否存在可以存储数据的大小和速度更高效的东西?我读到使用地图可能这是我最好的选择.

Ste*_*n C 5

答案取决于应用程序的主要访问模式.

如果主要访问模式在特定的x,y坐标处查找对象,那么您可能最好通过以下方式之一服务:

  • 一个2D数组(就像你现在一样); 即Thing[][],
  • a Map<Point, Thing>,或
  • a Map<Integer, Map<Integer, Thing>>.

(我建议使用第3个选项,因为Point每次对数据结构进行查找时,第二个选项都会导致创建临时对象.还有其他方法可以解决这个问题,但它会使应用程序变得更复杂.)

如果2D阵列是稀疏填充的,那么Map方法将节省空间,但需要花费时间.如果阵列密集,那么Map方法比2D阵列使用更多的空间.

如果主要访问模式是在给定的x,y坐标(或区域)附近查找对象,那么您可能需要类似四叉树数据结构的东西.

最后要注意的是,使用标准集合类型时存在不可避免的开销,尤其是当一个或多个参数类型是基本类型时.
如果您的性能要求特别"难",那么手动设计和实现自定义数据结构将节省空间和时间......如果您做得对.但缺点是,你有显著更多的代码编写,测试和维护,以及自定义数据结构不会与标准的收集API兼容.