我必须创建1000个堆,每个堆可以包含10 ^ 6个节点。为了便于访问节点,删除节点和更新节点的密钥,我计划创建一个大小为10 ^ 6 * 1000的2D数组,其中我将存储节点的引用。但是,是否可以用Java创建如此大的数组? 有没有更好的方法从堆中访问特定节点而不创建数组? 我可以遍历堆的每个节点以便搜索我的节点,但是这个进程将是1个堆的n阶,如果我必须从所有堆执行特定节点的删除,则该过程将需要是1000 * n的订单。
答案 0 :(得分:0)
Java数组由int
索引,因此最大索引为2^31 - 1
,即2147483647(约2E9),因此您应该可以使用1E9大小的数组。但是,你需要有足够的RAM,不要忘记十亿long
s需要8GB内存。
答案 1 :(得分:0)
如果你需要的内存大于int的最大值,你可以使用sun.misc.Unsafe。见这里:https://dzone.com/articles/understanding-sunmiscunsafe