快速搜索字典

时间:2012-09-24 08:05:50

标签: java algorithm data-structures

我需要在数据结构中存储几百个字符串。每个字符串都有两个与之关联的字段,比如说单词含义及其来源。我可以以任何方式存储单词,比如排序,反向排序或者你喜欢的任何方式。


我只需要尽快在字典中搜索字符串并获取两个相关字段。如果可能的话,我希望我的搜索比二分搜索更好。


我正在使用Java。我应该使用哪个data structureCollection Class


注意:我不想在此使用数据库。

4 个答案:

答案 0 :(得分:6)

您可以使用HashMap<String,MyDataObject> - 这将是最快速和最简单的使用方式。

平均搜索时间为O(|S|),其中|S|为字符串的长度。

您也可以尝试使用trieradix tree,但在开始使用HashMap解决方案之前,请确保您想要给它时间。

答案 1 :(得分:2)

显而易见的答案是“使用HashMap”,但并非没有警告。您搜索的每个字符串都需要计算其哈希码。如果每次都使用一个新对象,则每次都要支付O( s )(在这种情况下 s 是字符串长度),再加上另一个O( s < / em>)进行equals检查。

解决此问题的一种方法是intern用于搜索的所有字符串。这将确保重复使用一次计算的哈希码,并且还会使随后的equals检查短路。

另一种选择是使用 trie 。它的优点是你最多支付O( s ),但通常较少 - 这是一个基于前缀的搜索,所以一旦你遍历到你的前缀是唯一的点,你得到结果。

总之,如果您可以安排重用interned字符串,那么基于哈希码的解决方案是最佳的;如果没有, trie 是一个更好的选择。

其他常见选项是跳过列表(在Lucene中使用)和B树(在数据库索引中常见)。

答案 2 :(得分:1)

使用HashTableHashMap

您的结构应该类似于HashMap<String,Bookcontent>

其中BookContent是一个具有属性词义和原点

的类

答案 3 :(得分:1)

我建议您使用 Trie 数据结构。我做了类似的任务。 这个link可以帮助您实施Trie DS。