调整阵列的速度

时间:2014-03-07 01:49:00

标签: java arrays interpreter language-features

所以,我正在用Java编写一个Befunge解释器。除了我无法找到Funge Space问题的一个很好的解决方案之外,我几乎全部都失败了。目前我正在使用Befunge 93规范中规定的样式,这是一个80x25阵列来保存代码。

但是,在Funge,我应该有一个"无限的"代码数组(或4,294,967,296 x 4,294,967,296,在两个维度上分别为-2,147,483,648到2,147,483,648),但显然分配这么多空间绝对不是一个好主意。但是,除此之外,每次程序超出界限时创建一个新数组并将每个字符复制到其中似乎不是一个好主意。我错过了这个问题的解决方案吗?

所以基本上,我的问题是我需要以某种方式扩展数组,每次我越界,或使用某种其他数据结构。有什么建议吗?

Funge 98 specs

另外,顺便说一下,我仍然没有弄清楚如何发音Befunge或Funge,我总是说它像#34; Bee-funj"和" funj"

1 个答案:

答案 0 :(得分:3)

没有阅读规格(不 - 我的意思是,只是 NO !):4,294,967,296 x 4,294,967,296数组显然是一个高度理论化的构造,只有这些“数组条目”的一小部分可以并将永远使用。

除此之外:无论您使用数组还是其他任何集合,您都会遇到索引问题:数组索引只能是int个值,但是4,294,967,296是{{1}的两倍(Java中没有未签名的int)。

然而,表示这种“无限大”稀疏2D阵列的一种方法是将长值对(x和y坐标)映射到数组条目的映射。大概是这样的:

Integer.MAX_VALUE