错误,循环bigInteger的arraylist时出现java堆空间
我想在arraylist错误,循环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
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没有什么好处…您可以你说得对,我编辑了我的评论。在写的时候,我忘记了数字根本没有提供任何信息