java - TXT 中的升序整数到数组

标签 java arrays inputstream combinatorics capacity-planning

我的问题是将包含无符号整数的巨大文本文件(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/

相关文章:

java - 将大字节数组转换为 double 变量中的自然数组

java - 创建一个 JButton 数组

php - 如何过滤对象数组?

arrays - 在 Ruby 中对具有相似模式的字符串进行分组

java - 使用关于持久性和 XML 的 InputStream 的最佳方式

java - 如何从 Android Config Layout 中的 EditText 获取文本?

java - Byteman 阻止 Wildfly 8.1.0 启动?

java - 每个对话 session 的好处是什么?

java - 使用 FileChannel 编写任何 InputStream?

java - 如何将Java中的图片保存到多个blob中?