我需要在数据结构中存储几百个字符串。每个字符串都有两个与之关联的字段,比如说单词含义及其来源。我可以以任何方式存储单词,比如排序,反向排序或者你喜欢的任何方式。
我只需要尽快在字典中搜索字符串并获取两个相关字段。如果可能的话,我希望我的搜索比二分搜索更好。
我正在使用Java。我应该使用哪个data structure
或Collection Class
?
注意:我不想在此使用数据库。
答案 0 :(得分:6)
您可以使用HashMap<String,MyDataObject>
- 这将是最快速和最简单的使用方式。
平均搜索时间为O(|S|)
,其中|S|
为字符串的长度。
您也可以尝试使用trie或radix tree,但在开始使用HashMap
解决方案之前,请确保您想要给它时间。
答案 1 :(得分:2)
显而易见的答案是“使用HashMap
”,但并非没有警告。您搜索的每个字符串都需要计算其哈希码。如果每次都使用一个新对象,则每次都要支付O( s )(在这种情况下 s 是字符串长度),再加上另一个O( s < / em>)进行equals
检查。
解决此问题的一种方法是intern
用于搜索的所有字符串。这将确保重复使用一次计算的哈希码,并且还会使随后的equals
检查短路。
另一种选择是使用 trie 。它的优点是你最多支付O( s ),但通常较少 - 这是一个基于前缀的搜索,所以一旦你遍历到你的前缀是唯一的点,你得到结果。
总之,如果您可以安排重用interned
字符串,那么基于哈希码的解决方案是最佳的;如果没有, trie 是一个更好的选择。
其他常见选项是跳过列表(在Lucene中使用)和B树(在数据库索引中常见)。
答案 2 :(得分:1)
使用HashTable
或HashMap
您的结构应该类似于HashMap<String,Bookcontent>
其中BookContent
是一个具有属性词义和原点
答案 3 :(得分:1)
我建议您使用 Trie 数据结构。我做了类似的任务。 这个link可以帮助您实施Trie DS。