我正在回顾Googles Guava API的功能,我遇到了一个我在"真实世界编程"体验中没有看到过的数据结构,即BiMap.对于给定值,这种构造的唯一好处是能够快速检索密钥吗?是否存在使用BiMap最佳表达解决方案的问题?
任何时候你想要能够进行反向查找而不必填充两个地图.例如,您希望按名称查找电话号码的电话目录,但也希望进行反向查找以从号码中获取名称.
路易斯提到了BiMap实施中可能节省的内存.这是你通过包装两个Map实例唯一不能得到的东西.不过,如果你让我们Map为你包装实例,我们可以处理一些边缘情况.(你可以自己处理所有这些,但为什么要打扰?:))
put(newKey, existingValue),我们会立即报错,以保持两张地图同步,而不是在意识到它与另一张地图中的现有地图冲突之前将条目添加到一张地图.(forcePut如果您确实要覆盖现有值,我们会提供.)我们为插入null或其他无效值提供类似的安全措施.BiMap 视图使两个映射保持同步:如果从entrySet原始映射中删除元素BiMap,则其相应的条目也将从反向中删除.我们做同样的事情Entry.setValue.BiMap和它的反向保持"连接",并且条目只被序列化一次.inverse()以便foo.inverse().inverse()返回foo,而不是包装器的包装器.values()以返回a Set.inverse().keySet()除了保持与原始迭代顺序相同的迭代顺序外,此集与您获得的集相同BiMap.| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |