如何在Java中编写真正长的数组?

时间:2014-03-27 18:31:52

标签: java arrays

我需要编写一个可以容纳2 ^(N / 2)个元素的数组。 N可以大到2 ^ 62,大约是20亿个元素。有没有办法存储所有这些元素而不给Java更多的内存?我正在使用此字符串列表来搜索冲突/查找重复项。

修改

我正在尝试对Sha-1的一部分执行生日哈希攻击。 N可以大到2 ^ 62。为了执行生日攻击,我需要生成2 ^(N / 2)个设定长度的随机字符串。

编辑编辑

这是用于加密分配。

1 个答案:

答案 0 :(得分:2)

你可以这样做。我刚试过以下练习:

这是我的代码:

public class TestBigArray {
    public static void main(String[] args) {
        String[] a = new String[2*1_000_000_000];
    }
}

我尝试使用默认堆运行它并获得了excpetion:

c:\temp>java TestBigArray
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at TestBigArray.main(TestBigArray.java:3)

然后我将堆增加到20G并且程序运行了:

c:\temp>java -Xmx20G TestBigArray

c:\temp>

但是我的笔记本电脑上花了一分钟才启动,Windows在此期间几乎停滞不前。

所以,我不建议你在练习中做这样的事情,除非你真的需要这个并且你有非常强大的机器可以运行。我建议您使用集合(例如列表),特别是LinkedList