【发布时间】:2013-03-20 03:57:04
【问题描述】:
我有一个哈希图,其中包含约 8 亿个条目(字符串)。它实际上被序列化成一个我已经进入 hashmap 的文件。
现在我有另一个巨大的字符串列表,大小约为 3500 万。我需要一个一个地读取这 3500 万个字符串,并以一种特定的方式对它们进行格式化,这种方式本身就是一个单独的方法(这是一个非常轻量级的处理)。
然后我需要检查对列表中的一个字符串进行格式化的结果是否已经存在于 hashMap 中。
在 Java 中最有效的方法是什么?
【问题讨论】:
-
这不是 Java,但我会将它们推送到数据库中,并会在其上进行 JOIN... 8000 万行现在对于任何严重的 RDBMS 来说都几乎是不可能的。我建议使用 Postgres。
-
标题说8亿,正文却说8000万。哪个是正确的?
-
还有,元素是什么?
ints?longs?还有什么? -
在 java 中最有效的方法是将数据放入数据库(可能是 MySQL)并使用 JDBC 访问它。
-
我对所有这些对数据库的建议感到惊讶。由于数据已经存储在哈希图中,数据库(带有索引)不会提供太多好处(特别是如果这是一项一次性任务)。 3500万不是很多。您应该能够将所有哈希值存储在内存中。现在,对于第一组中的每个元素,检查它是否在第二组中。如果你能在内存中容纳 8000 万个哈希值,那就更好了。
标签: java algorithm data-structures