有没有办法在java中使用无限列表?

时间:2015-03-07 00:02:32

标签: java

我试图制作一个随机生成的二维游戏,我打算用一个生成点右边的地形列表和一个生成点左边的地形列表。但是,我需要这些列表没有长度限制,因为我希望世界是无限的。如果我找不到一种方法,我将会创造一个世界" round"但无限会更好。这可能吗?

4 个答案:

答案 0 :(得分:2)

ArrayList是无限的...直到内存耗尽。但我猜这不是问题。

更新:对,这是有限的,即使我认为没有人会注意到20亿单位后世界重新开始。

再想一想。你需要的是一个随机函数,当你给它种子和当前位置时,它会一次又一次地创建相同的值。因此,您不存储世界,您可以在运行中重新计算它。

所以你只需要一个无限的计数器来代替你世界的位置。唯一的挑战是存储事件结果,例如我们吃蘑菇和毁坏桥梁。

答案 1 :(得分:1)

将所有数据存储在列表中会有很多限制。

如果您使用ArrayList,则无法拥有无限元素。 如果您使用LinkedList,则会失去随机访问权限,因此速度会慢很多。

对于任何列表,RAM都是一个问题。


通过将生成的区域分割成块,然后将它们存储到硬盘驱动器中,您会感觉更好。

现在,您仍然需要一个已加载区域的列表,但这将受到范围的限制。如果你在某个城镇的东边有2英里游戏,那么就没有必要保留城镇信息(我希望)。


一个非常受欢迎的游戏是Minecraft。试图将整个Minecraft世界加载到你的RAM中是不会发生的 - 但它仍然具有无限世界的潜力。

答案 2 :(得分:1)

如果世界变得庞大,我就不会将其存储在ArrayListLinkedList中。相反,您可以让整个世界依赖于随机选择的longseed。然后可以使用i(或其他内容)找到位置new Random(seed ^ i).nextInt()的地形。这样世界将(有效地)无限,你不必将地形保存在记忆中。每当你回到以前访问过的世界时,它就会像以前一样。不同世界的数量是2 ^ 64,因此在你再次看到同一个世界之前,你必须活很长时间。

答案 3 :(得分:0)

ArrayList最多可包含2 ^ 31个值(因为数组的长度是整数,这是无符号的4字节结构)。

然而LinkedList是无限的,唯一的限制是JVM的内存。