java - 处理一个大文本文件需要多长时间?

标签 java algorithm random big-o

我有一个包含名称的大文本文件。

目标是生成一个随机名称(文件中的两个随机名称)。

考虑到该文件大约有 8k 行,每行一个名称,尝试从该文件中获取随机行在处理器方面是否高效?使用过程是否很长,因此运行时效率低下?

我打算使用以下方法来获取随机名称

 public static String choose(File f) throws FileNotFoundException
 {
 String result = null;
 Random rand = new Random();
 int n = 0;
 for(Scanner sc = new Scanner(f); sc.hasNext(); )
 {
    ++n;
    String line = sc.nextLine();
    if(rand.nextInt(n) == 0)
       result = line;         
 }

 return result;      
}

对这段代码的新手分析让我认为它的运行时间约为O(n)时间

但我正在使用较少数量的字符串对其进行测试(原始文件目前尚未完成,大约 150 个名称用于测试目的)。

这是生成随机名称的有效方法吗?

@编辑

考虑到我想在很短的时间内生成名称,效率很重要。

最佳答案

这取决于您是否想重复使用您的函数(生成许多随机名称)。 如果不是,则在文件大小内生成一个随机数,跳到相应的字节,找到最近的结束 get 行的行。

有关“RandomAccessFle”检查的帮助: https://bitsofinfo.wordpress.com/2009/04/15/how-to-read-a-specific-line-from-a-very-large-file-in-java/

如果您需要生成许多随机名称,请将整个文件读取到 ArrayList(8k 远远不够)。

--------根据btilly的想法进行修改

  1. 生成随机数
  2. 从该点读取固定长度的字符以覆盖一些 5-10 个名称(行)
  3. 用“\n”分割内容以创建行内容数组
  4. [0] 和 [n-1] 个元素将不完整
  5. 从其他数组元素中随机选择一个。

为了不带偏见地覆盖文件结尾,请在文件末尾添加大约 10 个 foobar 名称,如果选择了该名称,则重复该过程。

关于java - 处理一个大文本文件需要多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913708/

相关文章:

python - 不重叠某些像素的随机矩形

PHP Rand(),是否可以猜测序列中的下一个数字?并产生更好的数字

java - 如何从 pom 编辑器中删除 org.apache.maven.plugin.jar.JarMojo 错误

java - 为什么 java 安全管理器既不禁止创建 new Thread() 也不禁止启动它?

c - Feige Fiat Shamir 计划不起作用

java - 关于 LeetCode 279. 完美正方形的问题

php - 在网页中单击按钮时,如何显示列表中的随机短语?

java - 使用一个 fragment View 替换多个 fragment 类

Java泛型与无界通配符?

algorithm - 可变分区未在 mozart Oz 中引入错误