我正在寻求一些高层次的想法/思路,帮助我构建一个字典数据结构的系统。我有一个旧的“产品(药物)搜索系统”,它非常缓慢且复杂。我们需要完全重新设计这个系统,以实现高效和可维护的解决方案。
为了简化问题,我以“字典”为例(我希望我的新系统表现得像字典一样):
1. 我应该能够存储单词、描述和几个同义词(等效通用药品);
2. 单词不应重复;
3. 同义词也应是单词的实例(它应该具有单词、描述和同义词的行为);
4. 更快的搜索;
使用案例:
1. 搜索单词时,显示其含义和同义词;
2. 更快的搜索;
3. 应该可以删除同义词;
4. 添加新单词时,应能够将其添加到任何现有单词的同义词中。
我创建了下面所示的数据结构:
为了存储单词,我考虑使用
仍然存在很多挑战:
为了简化问题,我以“字典”为例(我希望我的新系统表现得像字典一样):
1. 我应该能够存储单词、描述和几个同义词(等效通用药品);
2. 单词不应重复;
3. 同义词也应是单词的实例(它应该具有单词、描述和同义词的行为);
4. 更快的搜索;
使用案例:
1. 搜索单词时,显示其含义和同义词;
2. 更快的搜索;
3. 应该可以删除同义词;
4. 添加新单词时,应能够将其添加到任何现有单词的同义词中。
我创建了下面所示的数据结构:
Class Word {
String meaning;
List<Word> synonyms;
}
为了存储单词,我考虑使用
TreeSet
,因为:
或者我可以使用
TreeSet
提供了实现Set接口的方法,并使用树进行存储。对象按升序排序存储。访问和检索时间很快,这使得TreeSet
成为存储大量需要快速查找的排序信息的绝佳选择。
HashMap
,其中单词和同义词实例的哈希码相等,这可以加快检索速度。仍然存在很多挑战:
每当添加新单词时,如何与其同义词建立链接?
在单词数量巨大时,查找会变慢。
编辑单词也应该反映出同义词,反之亦然。
TreeSet
而不是HashSet
?为什么同义词也需要成为一个Word
,因为根据定义它们与父Word
共享其meaning
? - Philipp Reichart