IP地址和远程端口的良好哈希函数

时间:2012-03-13 22:54:08

标签: java ip-address port hashset hash-function

我正在编写一个对等应用程序,我需要一个哈希函数来存储java哈希集中的IP /端口对。我没有重新发明轮子,而是想知道是否已有解决方案,但谷歌并没有产生太大的影响。

任何人都可以推荐IPv4的哈希函数(如果它也适用于IPv6,也可以使用!)和远程端口号?

端口号可能相同,除非客户端位于同一主机上,在这种情况下它将是顺序的。

2 个答案:

答案 0 :(得分:5)

String.hashCode()非常合理。我只想这样做:

int hash = (ip + "/" + port).hashCode();

它足够“随机”用于编码目的,以至于大部分JDK API都依赖它。

记住这句咒语......“代码越少越好”

答案 1 :(得分:1)

ip^port就像你能得到的一样简单

这非常不错,因为IP号码的最后几位基本上是随机的(从ISP分配ip)

你可以用ip^port|port>>>16扩展它,以避免结束所有0或1被避免的问题

对于IPv6,您需要ipv6_1^ipv6_2^ipv6_3^ipv6_4^portipv6_ii 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好一点,因为它不是可交换的,如果你感觉更好,你可以改变顺序