【发布时间】:2014-09-29 20:11:55
【问题描述】:
我正在进行一个 Java 项目,该项目将使用单词的“大字典”。 “字典”是指分配给字符串的某些数字(整数)。 “大”是指 100 MB 大小的文件。我想出的第一个解决方案可能是最简单的。在初始化时,我读入了整个文件并创建了一个大的 HashMap,稍后将用于查找字符串。
有没有一种无需在初始化时读取整个文件的有效方法?也许不是,但如果文件真的很大,让我们按照可用 RAM 的顺序说呢?所以基本上我正在寻找一种方法来有效地在存储在内存中的大型字典中查找内容。
到目前为止,感谢您的回答,因此我意识到我的问题可以更具体。正如您可能已经猜到的那样,该应用程序与文本挖掘有关,特别是以稀疏向量的形式表示文本(尽管有些人有其他创造性的想法:))。所以使用的关键是能够在字典中查找字符串,尽可能快地获取它们的键。只要优化了字符串查找时间,“读取”字典文件或将其索引到数据库中的初始开销并不重要。同样,让我们假设字典大小很大,与可用 RAM 的大小相当。
【问题讨论】:
-
您可以读取特定字节大小的文件,将其存储在
HashMap对象中,然后将该对象作为字节流对象存储在您的硬盘上。重复直到你读完整个文件。 -
@Mohammad 这并不能真正解决输入对象大于可用内存的用例。归根结底,您最终会得到一个
HashMap,其中包含太多无法容纳的对象。 -
Memory-mapped files 可能会有所帮助。查看FileChannel.map(),您可以从
RandomAccessFile获得FileChannel。 -
啊,我明白你的意思了。在这种情况下,数据检索很困难。
-
Trie (en.wikipedia.org/wiki/Trie) 将是此用例的(节省空间的)高效数据结构。
标签: java performance dictionary