java - 对于每个键具有多个值的查找表,Java 集合具有最高性能?
问题描述
我希望实现一个转换过程,基于接收一些值,我想返回一个类的一个或多个实例。
我需要以尽可能高的速度执行此操作,因为它被用作实时过程的一部分。
我有30000个类的集合,每个类都有一个对应的key,匹配一个要接收的信号,有些类可以链接到同一个key
哪个选项是最有效的,还是需要考虑其他选项?
Multimap
Map<String, ArrayList<Class>>
ArrayList<Class>
并使用谓词搜索?
解决方案
您的选择应基于最频繁的操作,在本例中为搜索。
Lists
为您提供最佳的插入 O(1) 和 O(n) 复杂度进行搜索
A 将 AMultiMap<A, B>
类型的键与 Collection 类型的值相关联
AMap<A, B>
将类型 A 的键与类型 B 的值相关联。
因此,aMultiMap<Integer, Set<String>>
可以看作是
Map<Integer, Collection<Set<String>>
.
两者都给出 O(1) 插入,最坏情况 O(k) k 是值中最长的集合。k 很大程度上取决于散列函数的质量,使用好的散列函数查找时间可以是 O(1)。
所以我会选择Map
or MultiMap
。如果您只初始化一次结构,然后从不插入新元素,那么一定要使用Map
.
推荐阅读
- python - 如何调用矩阵中的数字
- javascript - 使用 Javascript 删除附加到键的所有事件侦听器
- python - 如何从另一个函数中停止一个函数?
- python - gtol 参数问题 [神秘]
- python - Pygame Snake 游戏问题
- git - git合并两个分支(都不同于master)
- php - 使用 ajax 源数据的服务器端处理
- python - ValueError: OneVsOneClassifier 在只有一个类时不适合。& sklearn.cross_validation
- apache-spark - 如何根据日期时间列选择 pySpark DataFrame 中的最后一个值
- python - python - 如何根据Python中字典的键添加pandas列值?