Java中对contains()具有最快操作的数据结构是什么?
e.g。我有一组数字{1,7,12,14,20 ...}
给定另一个任意数x,生成布尔值的最快方式(平均)是否包含在集合中? !contains()的概率大约高出5倍。
所有地图结构都提供o(1)操作吗? HashSet是最快的方式吗?
答案 0 :(得分:114)
查看set(Hashset,enumset)和hash(HashMap,linkedhash ...,idnetityhash ..)的实现。他们有包含()
的O(1)This cheatsheet非常有帮助。
答案 1 :(得分:8)
对于具有相对较高密度的数字的特定情况,我使用BitSet,它将比哈希集更快且更小。
答案 2 :(得分:3)
唯一比HashSet更快的数据结构可能是Trove4J的TIntHashSet。这使用原语,无需使用整数对象。
如果整数的数量很小,你可以创建一个boolean [],其中每个存在的值都变为“true”。这将是O(1)。注意:HashSet不保证为O(1),更可能是O(log(log(N)))。
您只能获得理想哈希分布的O(1)。但是,您更有可能会遇到散列桶的冲突,而某些查找需要检查多个值。
答案 3 :(得分:0)
散列(散列集)是O(1)
中最好的散列