我的问题是获得巨大的文本文件(UTF-8 -1byte (ANSI)),其中包含无符号整数,没有重复的升序进入数组。快!所以我写的是:
while(scan.hasNextInt()) x.add(scan.nextInt());
但是,无论我使用ArrayList, Vectors还是包含数百万个整数的普通数组,确定所需的最大容量以避免以后增加数组大小都是明智的。
使用File.length(),我将获得文件中数字+换行符的数量。
在最坏的情况下,它将从0开始,每行只增加1。
我想是最大值。容量是可以用组合学计算出来的,但我在一个死胡同里。较小的数字不被0(002)填充的事实不知怎么让我感到困惑。
考虑到第一个Int的大小,我认为人们也可以进一步接近实际数量。
所以我最重要的问题是计算一个近似的[in O(1)]所需的最大容量。
此外,我在问我自己scan.hasNextInt()和scan.nextInt()是否考虑到这个相当独特的问题是最快的,如果通过线程并行化可以加快进程甚至更多(考虑到从硬盘驱动器读取的功能可能不是)。
的问候光环
假设只有一个字节用于分隔两个数字(例如:A 'n')我们有
- 10位1位数字-> 20字节
- 90个2位数字-> 270字节
- 900个3位数字-> 3600字节
- …你会得到模式
如果你的文件大小现在是1000字节,你可以拥有的最大是10个1位数,90个2位数,剩下710个3位数。710/4 = 177.5,最多10+90+177 = 277。