Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用一维贴图阵列是否比二维更快?_Java - Fatal编程技术网

Java 使用一维贴图阵列是否比二维更快?

Java 使用一维贴图阵列是否比二维更快?,java,Java,我正在制作一款基于地图的游戏,我使用一维数组来存储地图, 这让事情变得有点困难。我想知道二维数组是否更慢,所以如果不是,我不会在未来的项目中为自己制造麻烦 编辑: 数组大小大约为100万。 我用这个数组做的是获取它的值 并根据这些值在屏幕上放置纹理。Java中的2D数组是数组的数组。为了进行比较,1D数组int[]a={1,2,3,4}作为4个连续整数存储在内存中,如下所示: |1|2|3|4| 当2D数组int[]]b={{{1,2},{3,4}被存储为: +-------------

我正在制作一款基于地图的游戏,我使用一维数组来存储地图, 这让事情变得有点困难。我想知道二维数组是否更慢,所以如果不是,我不会在未来的项目中为自己制造麻烦

编辑: 数组大小大约为100万。 我用这个数组做的是获取它的值
并根据这些值在屏幕上放置纹理。

Java中的2D数组是数组的数组。为了进行比较,1D数组
int[]a={1,2,3,4}
作为4个连续整数存储在内存中,如下所示:

|1|2|3|4|
当2D数组
int[]]b={{{1,2},{3,4}
被存储为:

   +--------------+ 
   |              |
|.|.|   |1|2|    |3|4|
 |       |
 +-------+

也就是说,b[0]和b[1]分别指向内存中某个位置的2个整数数组

因此,b[0][0]要求读取并遵循引用来访问元素,而在1D情况下,a[0]可以直接访问元素

另一个性能问题是子阵列不一定连续存储在内存中,因此整个2D阵列不会一次性加载到处理器缓存中。根据阵列的大小和处理数据的方式,这可能会对性能产生很大影响

但是,在大多数情况下,这些性能差异会很小,不会影响程序的性能,您应该选择使程序更易于阅读和推理的结构

我的建议是使用2D数组,如果它能让你的程序更简单的话;您可以在以后对其进行优化


您还可以将数组封装在一个抽象数据类型中,该类型隐藏了访问数组的方式(即,它可以使用1D或2D数组,使用诸如getValue(x,y)之类的访问方法,该方法在内部管理数组寻址)。

这完全取决于您对这些数组所做的操作,他们的大小等等,你知道他们说什么过早优化。如果你需要一个2D数组,只需要使用一个2D数组。我不需要,我会认为它是可以使用2D ARALYSAL,虽然我通常同意你的论证,我最近遇到了一个用二维数组表示矩阵的数学密集型应用程序的性能问题,通常是
double[3][3]
。分析表明,创建二维数组在运行时占主导地位。更改为1D大大提高了性能。正如我所写的,在2D数组中访问元素肯定比在1D数组中要慢。这取决于您的特定应用程序的计算量。它不是访问,而是创建数组。这应该加粗:“您应该选择使程序更易于阅读和推理的结构”。当您的主要性能瓶颈是使用2d数组而不是1d数组时,您的代码将处于非常好的状态;)我编辑我的答案是为了遵循您的建议@sp00m,因为我同意这是我答案的中心思想