gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:17:26 24 4
gpt4 key购买 nike

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

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

考虑到该文件有大约 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. 从其他数组元素中随机选择一个。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com