2013-01-19 56 views
4

有没有办法在java中获得长度超过整数数据类型支持的数组?java中的任意数组长度

我正在寻找一些可能使用Java中的大整数进行索引的东西,因为本机支持的数组长度远不及我需要的那样大,因为我正在实现的算法。

+3

是否有可能您不应该使用数组实现此算法?你能告诉我们关于算法的一些信息吗?顺便说一句,你总是可以在你自己的类中实现一个分块数组,并且这个分块有很长的索引,但我认为重新考虑算法实现可能会更好。 –

+0

如果可能,我需要数组,因为它们更快;该阵列是一种新的主​​筛选算法,它与数列的长度相等,这意味着在第一次运行之后,长度将大于9699690. – Adam

+0

您打算如何使筛子产生质数?难道你通常只会去65,000或某些类似的东西,然后用一些主要的素数来测试比那更大的素数?数组将如何使用?如果你要做一些类似“getNearestPrime(N)”的操作,那么在实现这个方法时,你可以通过mod操作来找到解决方案所在的阵列。这将允许你使用多个数组。 –

回答

2

你确定你不需要改变算法吗? Integer.MAX等于2^31-1,即2147483647,每个int有4个字节给我们:8589934588字节的内存(8GB !!!)。

+1

好点;我期望生成一个数百万个素数的数组,不是为了列表的缘故,而是为了测试生成它们的函数。我曾在其他地方看过这样的报道,但是他们可能应该这样做。 – Adam

+1

但请注意,由于这不能完全回答“任意长度”,我必须选择一个更直接解决该问题的答案。尽管投了票。 – Adam

3

Int32为您提供 8千兆字节的存储空间。你有这么多的记忆吗?

我认为你应该使用稀疏数组,即散列索引元素。例如,只有HashMap<BigInteger,YourValueType>或类似BigMemory一些库和替代http://terracotta.org/products/bigmemory