处理一个大文本文件需要多长时间?
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的想法
- 生成随机数
- 从该点读取固定长度的字符以覆盖大约 5-10 个名称(行)
- 按'\n'拆分内容以创建行内容数组
- [0] 和 [n-1] 个元素将不完整
- 其他数组元素 select 一个随机元素。
为了不偏不倚地覆盖文件结尾,将大约 10 个 foobar 名称添加到文件末尾,如果那个是 selected,请重复该过程。
我有一个包含名字的大文本文件。
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的想法
- 生成随机数
- 从该点读取固定长度的字符以覆盖大约 5-10 个名称(行)
- 按'\n'拆分内容以创建行内容数组
- [0] 和 [n-1] 个元素将不完整
- 其他数组元素 select 一个随机元素。
为了不偏不倚地覆盖文件结尾,将大约 10 个 foobar 名称添加到文件末尾,如果那个是 selected,请重复该过程。