TXT到Array的升序整数

时间:2013-01-13 20:23:25

标签: java arrays inputstream combinatorics capacity-planning

我的问题是获取包含无符号整数的大文本文件(UTF-8 -1byte(ANSI)),而不会在升序中重复到数组中。快速! 所以我想要的是:

while(scan.hasNextInt()) x.add(scan.nextInt());

但无论我使用ArrayList,Vectors还是带有包含数百万个整数的文件的普通数组,最好确定以后避免增加数组大小所需的最大容量。

使用File.length(),我将获得文件中的数字+换行符。

在最坏的情况下,它将从0开始,每行仅增加1 我想不知怎的最大值。使用组合数法可以计算容量,但我处于死胡同。事实上,较小的数字没有被零填充(002)以某种方式抛弃了我。

考虑到第一个Int的大小,我认为人们也可以接近实际数量的近似值。

所以我最重要的问题是计算一个近似的[在O(1)]中所需的最大容量。

另外我问自己,如果考虑到这个相当独特的问题,scan.hasNextInt()和scan.nextInt()是最快的,如果通过Threads进行并行化可以进一步加快这个过程(考虑到读取的功能)硬盘可能没有。)

问候 卤素

1 个答案:

答案 0 :(得分:1)

假设只有一个字节用于分隔两个数字(例如a'\ n'),我们有

  • 10位数字,1位数 - > 20字节
  • 带有2位数的90个数字 - > 270字节
  • 900位数字,包含3位数字 - > 3600字节
  • ......你得到了模式

如果您的文件大小现在是1000个字节,则您可以拥有的最大值是10个1位数,90个两位数字,剩余710个字节用于3位数字。 710/4 = 177.5,最多10 + 90 + 177 = 277个数字。