查看集合中是否存在值(小集合,每秒多次检查)

时间:2012-05-30 14:25:30

标签: java collections lookup

我需要实现一种非常有效的方法来检查java中的一小部分项目(小于100,通常大约10)中是否存在某个键(长值)。

此检查必须尽可能高效,因为它将每秒进行几次(超过1000次,我正在处理多播源,我想丢弃我不需要处理的消息)

在应用程序生命周期中,需要检查的项目几乎没有变化,并且在性能方面可能很昂贵。

由于

  

感谢所有提示回复。我担心的是,我的长按键可能非常集中在长距离的小范围内,我很担心。如果你们认为这不是问题,我会试一试。

2 个答案:

答案 0 :(得分:3)

使用HashSet<Long> - contains()返回将需要纳秒(字面意思)。

代码如下:

private static Set<Long> keys = new HashSet<Long>();
// populate keys

if (keys.contains(requestKey)) { // this call is super fast!
    // ignore request
}

编辑:

不要担心你的渴望在一起“亲密”。 hashCode()的{​​{1}}足够“分散”,对于所有实际目的而言,它没有任何模式 - 也就是说,“关闭”的Longs没有“接近”的哈希码。

答案 1 :(得分:0)

如果效率优先于多功能性,您可以考虑使用Trove的TLongHashSet

  

长基元的开放寻址集实现。

这会给你O(1)并完全避免自动装箱。但对于这么小的收藏品来说,这可能是一个极端的选择。