我正在使用 java 程序从数据库中获取一些数据。然后我计算一些数字并开始将它们存储在一个数组中。我正在使用的机器有 4 GB 的 RAM。现在,我不知道会提前多少个数字,所以我使用 anArrayList<Double>.
但我知道大概会有300 million numbers.
因此,由于一个 double 是 8 个字节,因此该数组将消耗的内存的粗略估计是 2.4 gigs(可能更多,因为 ArrayList 的开销)。在此之后,我想计算这个数组的中位数,并使用将数组org.apache.commons.math3.stat.descriptive.rank.Median
作为输入的库double[]
。所以,我需要ArrayList<Double>
将double[]
.
我确实看到了很多提出这个问题的问题,他们都提到没有办法循环遍历整个数组。现在这很好,但由于它们还在内存中维护这两个对象,这使我的内存需求达到了 4.8 gigs。现在我们遇到了一个问题,因为我们可用的总 RAM 有 4 个演出。
首先,我是否怀疑该程序会在某些时候给我一个正确的内存错误(它当前正在运行)?如果是这样,我如何计算中位数而不必分配双倍的内存?我想避免对数组进行排序,因为计算中位数是 O(n)。