我遇到了几个问题和文章,说 Java 中的字典实现最好使用 tries。但是据我看来,大多数文章都没有涉及到重要的问题。因此,下面是一个真实世界的任务:
假设我需要使用 Java 实现一个词典(比如 Lingvo,但更简单)。对于我的特定任务,需要存储单词定义,并执行快速的词典查找。
请回答以下问题:
- 那么应该使用什么数据结构呢(Trie 还是 HashTable)?
- 如果我需要词典不区分大小写,应该如何组织它(搜索、数据结构)?
- 如果我希望它(搜索、词典)区分大小写怎么办?
P.S.:非常感谢提供代码示例。
先前的更新:如果我们在谈论 Java 中的标准 DS 实现,那么 HashTable 是否是这个特定任务的最佳选择?为什么不是 HashMap、TreeMap 或 LinkedHashMap?
HashTable
是一个线程安全的HashMap
(类似于Vector
和ArrayList
的区别),因此当您知道多个线程不会与其交互时,使用HashMap
更好。有趣的是,Collections.synchronizedMap(new HashMap())
比HashTable
更快,并且似乎提供了相同的安全性。TreeMap
要求其键是可比较的,并使用红黑树。LinkedHashMap
使用左/右/父引用(如果我没记错的话)而不是数组。这类似于ArrayList
和LinkedList
之间的差异。就我个人而言,在 Java 中,我很少使用Linked...
集合。 - KitsuneYMG