Hashcode 和 Equals 调试、性能

本文探讨了Java中URL类的HashCode和Equals方法存在的问题,由于其主机比较涉及阻塞的DNS查找,可能导致性能下降。推荐使用URI替代URL以避免此问题。此外,文章强调了实现最佳HashCode方法的重要性,它应快速、独特且与Equals一致。还提到了JPA中关于HashCode的特例以及调试和性能优化的建议。
摘要由CSDN通过智能技术生成

几周前,我 在 reddit 上遇到了这个故事, 它讨论了在 Map 中使用 URL 类作为键的问题。这归结为 java.net.URL中 hashcode() 方法的实现非常缓慢, 这使得此类在这种情况下无法使用。不幸的是,这是 Java API 规范的一部分,并且在不破坏向后兼容性的情况下不再可以修复。

我们能做的是理解equals和hashcode的问题。今后如何避免此类问题?

URL Hashcode 和 Equals 有什么问题?

为了理解这一点,让我们看一下 hashcode 和 equals 的 JavaDoc:

将此 URL 与另一个对象进行比较是否相等。

如果给定对象不是 URL,则此方法立即返回 false。

如果两个 URL 对象具有相同的协议、 引用等效的 hosts 、在主机上具有相同的端口号以及相同的文件和文件的片段,则它们是相等的。

如果两个主机名都可以解析为相同的IP地址,则认为两个主机是等效的;否则,如果任何一个主机名都无法解析,则主机名必须相等,不区分大小写;或两个主机名都等于​​ null。

由于主机比较需要名称解析,因此该操作是阻塞操作。

由于主机比较需要名称解析,因此此操作是阻塞操作。”

这可能不清楚。让我们用一个简单的代码块来澄清它:

<span style="color:#444444"><span style="background-color:#f6f6f6">系统。<span style="color:#333333"><strong>out</strong></span> .println( <span style="color:#333333"><strong>new</strong></span> URL( <span style="color:#880000">"http://localhost/"</span> ) <span style="color:#333333"><strong>.equals</strong></span> ( <span style="color:#333333"><strong>new</strong></span> URL ( <span style="color:#880000">"http://127.0.0.1/"</span> ))); 
系统。<span style="color:#333333"><strong>out</strong></s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值