首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于ip地址和远程端口的良好散列函数

用于ip地址和远程端口的良好散列函数
EN

Stack Overflow用户
提问于 2012-03-14 06:54:08
回答 2查看 5.5K关注 0票数 3

我正在编写一个点对点的应用程序,我需要一个散列函数来在java散列集中存储IP/端口对。我并没有重新发明轮子,而是想知道是否已经有了解决方案,但谷歌并没有做出太多让步。

有没有人能推荐一个适用于IPv4的散列函数(如果它也适用于IPv6,那就更好了!)以及远程端口号?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-14 07:15:53

String.hashCode()是相当合理的。我会简单地这样做:

代码语言:javascript
复制
int hash = (ip + "/" + port).hashCode();

对于编码来说,它是足够“随机”的,以至于很多JDK API都依赖于它。

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

票数 5
EN

Stack Overflow用户

发布于 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_ii的32位部分)

你也可以这样做

代码语言:javascript
复制
int hash=17;
hash=hash*5+ip;
hash=hash*5+port;
return hash

代码语言:javascript
复制
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要好一点,因为它是不可交换的,如果你觉得更好,你可以改变它的顺序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9693453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档