Java:大型阵列设计

时间:2012-10-06 02:15:01

标签: java multidimensional-array

当我阅读此链接Java Criticism时。在大阵列部分。有两点我不明白:

  

Java也缺少真正的多维数组(连续分配   由单个间接访问的单个内存块),其中   限制科学和技术计算的性能

在C中,我知道多维数组只是元素的连续内存。因此,如上所述,Java中的每一行都是一个对象,多行就像多个对象一样,并且它们在内存中不是连续的,对吧?

  

Java因为不支持超过231的数组而受到批评 -   1(约21亿)元素......数组必须用int索引   values ...尝试访问具有长索引的数组组件   值导致编译时错误

这是否意味着,如果我们可以通过长整数访问数组组件,那么数组大小可以更大?在那种情况下,所以,这仍然限制数组的大小是长,对吗?

谢谢:)

1 个答案:

答案 0 :(得分:3)

  

... Java中的每一行都是一个对象,多行就像多个对象一样,它们在内存中不是连续的,对吧?

这是正确的。 Java多维数组是一个数组数组,每个数组都表示为一个单独的对象。

  

这是否意味着,如果我们可以通过长整数访问数组组件,那么数组大小可以更大?

没有。 Java数组的最大大小为2 ^ 31 - 1个元素。

JLS在JLS 10.4处说明了这一点:

  

“数组必须用int值索引; short,byte或char值也可以用作索引值,因为它们需要进行一元数字提升(第5.6.1节)并成为int值。

     

尝试访问具有长索引值的数组组件会导致编译时错误。“


简而言之,您链接到的页面正确,指出Java不适合需要使用非常大的数组的应用程序。 (可以解决这些限制,但如果不将基础数组表示作为对象包装,则无法干净地执行此操作。这会影响性能,并且意味着您无法使用[...]语法进行索引。)