我的问题是将包含无符号整数的巨大文本文件(UTF-8 -1byte (ANSI))获取到数组中,而没有按升序排列的重复项。快速地! 所以我想要这样的东西:
while(scan.hasNextInt()) x.add(scan.nextInt());
但是,无论我使用 ArrayList、 vector 还是包含包含数百万个整数的文件的普通数组,明智的做法是确定所需的最大容量,以避免以后增加数组大小。
使用 File.length() 我将获得文件中的数字量+换行符。
在最坏的情况下,它将从 0 开始,并且每行仅增加 1。
我认为以某种方式最大。容量可以使用组合数学来计算,但我陷入了死胡同。事实上,较小的数字不会被零(002)填充,这让我感到困惑。
考虑到第一个 Int 的大小,我认为也可以更接近实际数量。
所以我最重要的问题是计算所需的近似[O(1)]最大容量。
此外,我问自己,考虑到这个相当独特的问题,scan.hasNextInt() 和 scan.nextInt() 是否是最快的,以及通过线程进行并行化是否可以进一步加快进程(考虑到从硬盘可能不是)。
问候 光晕
最佳答案
假设只有一个字节用于分隔两个数字(例如“\n”),我们有
- 10 个数字,其中 1 位 -> 20 个字节
- 90 个 2 位数字 -> 270 字节
- 900 个 3 位数字 -> 3600 字节
- ...你得到了模式
如果您的文件大小现在为 1000 字节,则最多可以包含 10 个 1 位数、90 个两位数,还剩下 710 个字节用于 3 位数。 710/4 = 177.5,最多可以得到 10+90+177 = 277 个数字。
关于java - TXT 中的升序整数到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307760/