实时匹配记录

时间:2011-08-19 21:47:07

标签: java hashmap

这就是我想要实现的目标:我正在通过蜂窝网络发送一些数据包。我也在嗅探流量以检查对这些数据包的响应。响应可能会在10小时内到达任何地方。

我发送的数据包都是唯一的(往返),我想知道匹配数据包和响应的最佳方法。

我可以创建一个hashmap并将实时发送的每个数据包放入其中,并在响应时将其与响应匹配。此时,has map条目要么停留在hashmap中,要么被删除(在响应之后)。

所以,现在问题是:考虑到我们每分钟发送2000个数据包,最好的方法是什么? hashmap会足够健壮吗?搜索时间怎么样?

4 个答案:

答案 0 :(得分:2)

我认为单独的HashMap不够强大,因为它不是线程安全的。我会尝试 ConcurrentHashMap

对于大量数据寻找一些缓存实现 - 这些通常能够溢出到磁盘并且有时间到期,因此您可以免费获得清理。

答案 1 :(得分:0)

散列图肯定会“足够强大”。在每分钟发送2000个数据包并假设平均响应时间为5小时时,您可能有600,000个未完成的数据包。假设您的设备有足够的内存来容纳数据包,并且您分配了足够大的哈希表(比如600,000,加载因子为.75),那么查找将非常快。

查看HashMap的javadoc以获取更多详细信息。

答案 2 :(得分:0)

如果你有足够的内存,你应该没有问题,前提是地图的密钥的hashCode方法被正确写入,并允许分配潜在的1,200,000个密钥,尽可能少的冲突。 HashMap是O(1)。

但记忆可能是一个问题。在最坏的情况下,您的地图中将有1,200,000个条目。如果它们每个占用400个字节(这不多,但我不知道你的数据包包含什么),你已经需要460 MB。

答案 3 :(得分:0)

HashMap是“健壮的”(从某种意义上讲它是有效的)。另一个考虑因素是设备内存。

让我们看看:10小时* 60小时/小时* 2000包/分钟= 1.200.000。对于HashMap,这意味着至少2.400.00指针,32位体系结构9.600.000字节。仅针对HashMap的结构,假设没有colisions(每次冲突额外4个字节)并排除数据本身的大小(键和值)。记忆将是一个问题。

关于时间,它取决于equals()和hashCode()函数占用多少,以及HashMap中的碰撞次数(碰撞次数= =等于执行的数字,或多或少) 。没有这些数据就无法计算出来。

相关问题