【发布时间】:2013-06-20 00:16:04
【问题描述】:
我有一个包含 3000 万个用户 ID 的大文件。那个大文件看起来像这样,每一行都有一个用户 ID。
149905320
1165665384
66969324
886633368
1145241312
286585320
1008665352
1135545396
186217320
132577356
现在,我打算从那个大文本文件中获取任意一行。我知道那个大文本文件中用户 ID 的总数。我不确定从那个大文本文件中选择随机元素的最佳方法是什么。我正在考虑将所有这 3000 万个用户 ID 存储在一个集合中,然后从 hastset 中随机选择元素,但使用这种方法会出现内存不足错误。
这就是原因,我试图从一个大文本文件中随机选择元素。
final String id = generateRandomUserId(random);
/**
* Select random elements from the a big text file
*
* @param userIdsSet2
* @param r
* @return
*/
private String generateRandomUserId(Random r) {
File bigFile = new File("C:\\bigfile.txt");
//randomly select elements from a big text file
}
最好的方法是什么?
【问题讨论】:
-
为什么不将用户 ID 存储为固定宽度,方法是用空格或其他东西填充它们。然后你可以计算一个条目的偏移量并直接寻找它。
-
@gordy:真正的问题是:他为什么不创建数据库?如果您的项目太大以至于您有 3e10 个用户 ID,那么将它们存储在文本文件中对我来说看起来很糟糕。