循环bigInteger的arraylist时出错,java堆空间

时间:2014-11-09 23:26:48

标签: java biginteger

我想在我的arraylist中随机输入5个值< BigInteger>。

我将首先要求输入值。该值可以是1-∞。

我意识到代码的问题是,如果我输入一个值> = 500000,程序将启动 抛出堆空间错误。我该如何解决这个问题?

public static void main(String[] args) {
    BigInteger p;
    p = readBigInteger("Enter a value ");
    ArrayList<BigInteger> list = new ArrayList<BigInteger>();

    for (BigInteger bi = BigInteger.valueOf(1); bi.compareTo(p) <= 0; bi = bi.add(BigInteger.ONE)) {
        list.add(bi);
    }
    Collections.shuffle(list);

    for (BigInteger bi = BigInteger.valueOf(1); bi.compareTo(new BigInteger("5")) <= 0; bi = bi.add(BigInteger.ONE)) {
        Integer a = bi.intValue();
        System.out.println(list.get(a));
    }
}   

2 个答案:

答案 0 :(得分:2)

基本上,您正在创建与用户输入一样多的BigInteger对象。因此,如果用户提供500000作为输入,那么会有很多BigIntegers。它们占用程序堆中的空间(堆是所有对象的存储空间)。问题是,此存储空间有限,如果没有剩余空间,JVM将取消您的程序。您可以尝试使用JVM命令使堆更大。但你真的需要存储所有那些BigIntegers吗?可能不是。

答案 1 :(得分:0)

所以你想获得指定范围内的5个随机数?使用方法here并调用它5次。