如何在java中创建一个大数组

Tah*_*raf 7 java

我想创建一个大小的布尔数组,用户将其作为输入.例如 - 用户可能会输入一个大数字,如1000000000000; 所以我必须创建一个大小为1000000000000的布尔数组.我面临的问题是,我不能将输入存储为int,因为它无法容纳如此大的数字 - 因此我无法创建数组.Double是一个选项.我可以将输入数字存储为double,但我不知道如何创建双数字大小的数组.这就是这个想法 -

Scanner scanner = new Scanner(System.in);
int target = scanner.nextInt();
boolean [] array_a=new boolean [(target)];
Run Code Online (Sandbox Code Playgroud)

如果目标超过int范围,它将无法工作.任何帮助表示赞赏.

更新:谢谢大家.所以你只能创建一个int的最大范围(2147483648)大小的数组,对吧?内存方面没有提到我.要采取不同的方法.

T.J*_*der 11

您无法在Java中创建大小大于最大正数的数组int,因为数组索引是int.(对于各种List实现也是如此.你可以创建一个包含更多条目[ LinkedList例如]的东西,但是类似的东西get并且size开始工作不正常,你只能通过iterator[假设事情没有] 得到以后的条目这只是简单的休息时间,这需要一段时间.)

您似乎不太可能真的需要创建一个boolean超过2,147,483,647个条目的空间数组,但如果您真的这样做,则必须创建多个数组并通过获取索引的模数来选择正确的数组(这将需要成为a long).(或者使用一些非JDK库,如果存在这样做.)这将需要像4G的RAM.可行,但可能性非常高,不同的方法完全会更好.

但1,000,000,000,000个元素?这将需要大约1-2 TB的RAM.正如NPE所说,如果你不是在超级计算机上运行,​​你就不会有这种情况.

  • 我没试过.但是`size()`的List javadoc特别允许列表> MAX_INT (2认同)

NPE*_*NPE 7

必须创建一个大小为1000000000000的布尔数组.我面临的问题是,我不能将输入存储为int

你的问题不是那个.您的主要问题是您将没有足够的内存来分配具有1,000,000,000,000个元素的数据结构(即使您克服了int索引的限制).

您需要重新考虑算法.

  • 即使你确实有一个具有那么多可寻址内存的系统,Java数组也只限于(2 ^ 31 - 1)个元素.这个限制更为根本. (2认同)