我第一次遇到问题是试图为一个字典间隙列表发布程序创建一个非常大的int (7k X 30k)。但是,遗憾的是,我在尝试分配数组时耗尽了空间。如何创建一个2-d整数数组?
我想要的是一个列表列表,其中列表中的每个列表都是一个整数列表。以下是我的代码示例。
代码:
static final int numberOfTerms = 6782;
static final int numberOfLines = 30383;
byte[][] countMatrix = new byte[numberOfLines][numberOfTerms];
int[][] gapsMatrix = new int[numberOfLines][numberOfTerms]; // To big!!这个列表列表将用整数填充,这些整数表示同一单词在特定文本中的两次出现之间的间隔。因此,在计数矩阵中,我保存了一个字节,指示是否为指定的索引指定了一个字。然后在我现在创建的函数中,我正在遍历countMatrix,如果我在那里找到一个字节,我取当前索引减去最后找到的索引,并将该数字保存在整数的2D数组中,这给出了文本中每个相同单词之间的间距。
那么,我该如何创建完成此任务所需的数据结构呢?
发布于 2012-09-18 22:03:34
我不知道这是否适用于你,但是如果你想坚持使用数组,你可以尝试Sparse Matrix as选项。还有其他几个选项。Map、List、Weak reference Collections等
发布于 2012-09-18 22:05:16
要创建数组,您需要有足够的内存来创建它。
对于每个值,int使用4个字节,而数组至少使用N*M倍。
例如,4* 30383 * 6782大约是820MB,你需要有空闲空间才能创建它。
这大约是8美元的内存,所以这应该是一个很大的问题,除非你没有这么多内存,或者你把最大内存设置得太低。
我会增加你的最大内存至少1 GB,它应该可以工作。
替代方案包括
char、short或byte,小2-4倍。发布于 2012-09-18 21:59:04
你只是没有足够的内存来做到这一点。
http://www.javamex.com/tutorials/memory/array_memory_usage.shtml
抱歉,我没有说清楚,但是,使用另一个DS不太可能改变这一点。
https://stackoverflow.com/questions/12478372
复制相似问题