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

How long does it take to process a big text file?

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

objective是随机生成一个名字(从文件中随机取两个名字)。

考虑到该文件大约有 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 个名称用于测试目的)。

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

@编辑

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

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

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

如果需要生成很多随机名字,把整个文件读入一个ArrayList(8k远远不够)。

--------修改meed btilly的想法

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

为了不偏不倚地覆盖文件结尾,将大约 10 个 foobar 名称添加到文件末尾,如果那个是 selected,请重复该过程。