我正在编写一个点对点的应用程序,我需要一个散列函数来在java散列集中存储IP/端口对。我并没有重新发明轮子,而是想知道是否已经有了解决方案,但谷歌并没有做出太多让步。
有没有人能推荐一个适用于IPv4的散列函数(如果它也适用于IPv6,那就更好了!)以及远程端口号?
端口号很可能是相同的,除非客户端位于同一主机上,在这种情况下,端口号将是连续的。
发布于 2012-03-14 07:15:53
String.hashCode()是相当合理的。我会简单地这样做:
int hash = (ip + "/" + port).hashCode();对于编码来说,它是足够“随机”的,以至于很多JDK API都依赖于它。
记住这个咒语..。“代码越少越好”
发布于 2012-03-14 07:17:01
ip^port是你能得到的最简单的东西
这相当不错,因为IP编号的最后几位基本上是随机的(从ISP分配ip )
您可以使用ip^port|port>>>16进行扩展,以避免以全0或全1结尾的问题
对于IPv6,你需要ipv6_1^ipv6_2^ipv6_3^ipv6_4^port ( ipv6_i是i的32位部分)
你也可以这样做
int hash=17;
hash=hash*5+ip;
hash=hash*5+port;
return hash或
int hash=17;
hash=hash*5+ipv6_1;
hash=hash*5+ipv6_2;
hash=hash*5+ipv6_3;
hash=hash*5+ipv6_4;
hash=hash*5+port;
return hash作为你的标准散列函数,这比标准的xor要好一点,因为它是不可交换的,如果你觉得更好,你可以改变它的顺序。
https://stackoverflow.com/questions/9693453
复制相似问题