【发布时间】:2010-07-27 01:32:10
【问题描述】:
所以,这可能是一个愚蠢的问题,但我有一个唯一 ID 到唯一值的映射。有时我想知道某个 ID 的值,有时我想知道某个值的 ID。我搜索的次数多于修改集合。我想知道这里是否有一种特殊的数据结构有意义,或者我是否应该只维护集合的两个副本(永远不会超大)——一个由 ID 键控,一个由值键控。
谢谢!
【问题讨论】:
标签: language-agnostic data-structures performance mapping
所以,这可能是一个愚蠢的问题,但我有一个唯一 ID 到唯一值的映射。有时我想知道某个 ID 的值,有时我想知道某个值的 ID。我搜索的次数多于修改集合。我想知道这里是否有一种特殊的数据结构有意义,或者我是否应该只维护集合的两个副本(永远不会超大)——一个由 ID 键控,一个由值键控。
谢谢!
【问题讨论】:
标签: language-agnostic data-structures performance mapping
维护集合的两个副本是规范的解决方案。
请注意,如果合适,两个方向可以使用不同的集合类型(例如具有不同哈希函数的哈希表、哈希表和平衡树等)。
【讨论】:
类似于 Google 的 BiMap。
【讨论】:
BiMap<Integer, String> map = new HashBiMap<Integer,String>(); map.put(1,"Hello"); Integer id = map.inverse().get("Hello");。但几乎实现实际上是在每个 put() 上维护 2 个 HashMap。