在我的数据库中有一个名为的表author,其中有4列:
例如,用户正在搜索Edgar Allan Poe.在我们的表中,Edgar Allan Poe保存为:firstName - Edgar,middleName - Allan和lastName - Poe.这个查询非常简单.但是如何编写一个不仅与Edgar Allan Poe相匹配的查询,还包括与Poe Allan Edgar,Edgar Poe,Allan Poe,Edgar Allan,Allan Edgar Poe匹配的查询,而不是自己编写所有这些可能的组合?此外,当用户搜索时,他/她完全搜索"Edgar Allan Poe"或"Poe Allan Edgar",而不是在单独的字段中搜索.
在GoF设计模式一书中,谈到观察者模式的实现部分时,有这样的规定:
将主题映射到其观察者 主题跟踪它应通知的观察者的最简单方法是在主题中显式存储对它们的引用。然而,当主体较多而观察者较少时,这种存储可能过于昂贵。一种解决方案是通过使用关联查找(例如哈希表)来以空间换取时间来维护主体到观察者的映射。因此,没有观察者的主题不会产生存储开销。另一方面,这种方法增加了接触观察者的成本。
我不明白使用哈希表如何提高存储容量。在 Java 中,对于每个主题,我们都可以有一个观察者列表List<Observer>。如果没有观察者附加到该主题,则列表引用将为空。如果我们使用哈希表,Map<Subject, List<Observer>我们仍然有列表,但我们也有对主题的引用,所以这种方式的内存效率有点低。不知道是否相关,Gof书中实现的语言是Smalltalk和C++。