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

错误,循环bigInteger的arraylist时出现java堆空间,java,biginteger,Java,Biginteger,我想在arraylist中随机选择5个值 我将首先要求输入一个值。该值可以从1开始-∞. 我意识到代码的一个问题是,如果我输入一个值>=500000,程序将启动 抛出堆空间错误。我如何解决这个问题 public static void main(String[] args) { BigInteger p; p = readBigInteger("Enter a value "); ArrayList<BigInteger> list = new ArrayLi

我想在arraylist中随机选择5个值

我将首先要求输入一个值。该值可以从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));
    }
}   
publicstaticvoidmain(字符串[]args){
大整数p;
p=readBigInteger(“输入值”);
ArrayList=新建ArrayList();

对于(biginger bi=biginger.valueOf(1);bi.compareTo(p)基本上,您创建的biginger对象数量与用户输入的数量相同。因此,如果用户提供500000作为输入,那么将有如此多的biginger。它们在程序堆中消耗空间(堆是所有对象的存储)。问题是,此存储是有限的,如果没有剩余空间,JVM将取消您的程序。您可以尝试使用JVM命令使堆变大。但您真的需要存储所有这些大整数吗?可能不需要。

因此,要在指定范围内获取5个随机数,请使用该方法并调用5次。

>>我将首先要求输入一个值。该值可以是1-∞. 你真的喜欢bigint之类的东西吗?能达到
@mlvn我真的不确定它能达到的最大值是多少。很抱歉编辑:您的内存不足,因为您正在将0到
p
之间的每个大整数放在一个列表中。获取5个不重复的随机数,或者根本不存储它们,因为知道123456整数是123456没有什么好处…您可以你说得对,我编辑了我的评论。在写的时候,我忘记了数字根本没有提供任何信息