【发布时间】:2011-04-07 19:26:37
【问题描述】:
我正在寻找一种高性能、并发的 MultiMap。我到处搜索,但我根本找不到使用与 ConcurrentHashMap 相同的方法的解决方案(仅锁定哈希数组的一部分)。
多图会经常被读取、添加和删除。
多映射键是一个字符串,它的值是任意的。
我需要 O(1) 来查找给定键的所有值,O(N) 可以删除,但 O(logN) 将是首选。
删除给定键的最后一个值将从键中删除值的容器至关重要,以免内存泄漏。
编辑:这是我构建的解决方案,在 ApacheV2 下可用: Index (multimap)
【问题讨论】:
-
没有 O(1) 查找的 Map(除了桶算法的东西,像往常一样)。 HashMaps 的 O(cn) 非常小。
-
ziggystar,这取决于散列函数分配密钥的程度。如果它是随机的——对于任意字符串,你可以期望现代哈希——那么查找是 O(1)。这也是 HashMap Javadoc 所说的。
-
我有一个可能包含数百万个对象的注册表,它们可能共享一些属性,我需要这些属性的索引,以便检索具有特定属性的所有对象。
-
也许是时候在 cstheory.stackexchange.com 上搜索你的答案了?看起来您将滚动自己的数据结构...
-
@John V:这是我构建的:gist.github.com/566793
标签: java scala concurrency multimap