我需要实现一种非常有效的方法来检查某个键(长值)是否存在于 java 中的一小部分项目(少于 100 个,通常约为 10 个)中。
此检查必须尽可能高效,因为它将每秒进行多次(超过 1000 次,我正在处理多播提要并且我想丢弃不需要处理的消息)。
需要检查的项目在应用程序生命周期中几乎没有变化,而且在性能方面可能会很昂贵。
谢谢
感谢所有及时回复。我担心的是我的长键可能非常集中在长的一个小范围内,我很担心。如果你们认为这不会是一个问题,我会试一试。
我需要实现一种非常有效的方法来检查某个键(长值)是否存在于 java 中的一小部分项目(少于 100 个,通常约为 10 个)中。
此检查必须尽可能高效,因为它将每秒进行多次(超过 1000 次,我正在处理多播提要并且我想丢弃不需要处理的消息)。
需要检查的项目在应用程序生命周期中几乎没有变化,而且在性能方面可能会很昂贵。
谢谢
感谢所有及时回复。我担心的是我的长键可能非常集中在长的一个小范围内,我很担心。如果你们认为这不会是一个问题,我会试一试。
使用 a -返回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()
of足够“Long
分散”,以至于对于所有实际目的都没有模式 - 也就是说,“接近”的 Long 没有“接近”的哈希码。