Java中contains()的最快数据结构?

时间:2010-07-16 17:52:54

标签: java data-structures set

Java中对contains()具有最快操作的数据结构是什么?

e.g。我有一组数字{1,7,12,14,20 ...}

给定另一个任意数x,生成布尔值的最快方式(平均)是否包含在集合中? !contains()的概率大约高出5倍。

所有地图结构都提供o(1)操作吗? HashSet是最快的方式吗?

4 个答案:

答案 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)

中最好的散列