我有一个包含名称的大文本文件。
目标是生成一个随机名称(文件中的两个随机名称)。
考虑到该文件大约有 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的想法进行修改
- 生成随机数
- 从该点读取固定长度的字符以覆盖一些 5-10 个名称(行)
- 用“\n”分割内容以创建行内容数组
- [0] 和 [n-1] 个元素将不完整
- 从其他数组元素中随机选择一个。
为了不带偏见地覆盖文件结尾,请在文件末尾添加大约 10 个 foobar 名称,如果选择了该名称,则重复该过程。
关于java - 处理一个大文本文件需要多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913708/