关于hashcode()你需要了解的3件事-java开发java经验技巧

关于hashcode()你需要了解的3件事-java开发java经验技巧

ID:32677154

大小:138.53 KB

页数:6页

时间:2019-02-14

关于hashcode()你需要了解的3件事-java开发java经验技巧_第1页
关于hashcode()你需要了解的3件事-java开发java经验技巧_第2页
关于hashcode()你需要了解的3件事-java开发java经验技巧_第3页
关于hashcode()你需要了解的3件事-java开发java经验技巧_第4页
关于hashcode()你需要了解的3件事-java开发java经验技巧_第5页
资源描述:

《关于hashcode()你需要了解的3件事-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、关于hashCodc()你盂要了解的3件事-编程开发技术关于hashCode()你需要了解的3件事本文illImportNew-南半球翻译自eclipsesource。欢迎加入翻译小组。转载谙见文末要求。在Java屮,每一个对彖都冇一个容易理解但是仍然冇时候被遗忘或者被误用的hashCode方法。这里有3件事情要时刻牢记以避免常见的陷阱。一个对象的哈希码允许算法和数据结构将对象放入隔间,就象打印机类型案件中的字母类型。打印机将所有的“A”类型放到一个房间,它寻找这个的时候就只需要在这个房间进行寻找。这种简单的系统让他在未排序的抽屉屮寻找类型的时候更快

2、。这也是基于哈希的集合的想法,例如HashMap和HashSeto为了使你的类与其他基于哈希的集合或其他依赖哈希码的算法一起正常工作,所有hashCode?的实现必须遵守一个简单的契约。hashCode?契约这个契约在hashCode?方法的?JavaDoc?中进行了阐述。它可以大致的归纳为卜'而几点:1.在一个运行的进程中,相等的对象必须要有相同的哈希码2.请注意这并不意味着以下常见的误解:3.不相等的对象一定有着不同的哈希码——错!4.有同一个哈希值的对象一定相等——错!这个契约允许不同的对象共享相同的哈希码,例如根据上图中的的描述,“A”和“U

3、”对象的哈希值就一样。在数学术语中,从对象到哈希码的映射不一定为内射或者双射。这是显而易见的,I大I为可能的不同对象的数量经常比可能的哈希吗的数量?(2八32)更大。编辑:在早期的版本中,我错误的认为哈希码的映射一定屈于内射,但是不一定是双射,这显然是错的。感谢Lucian指岀这个错误。这个约定直接导致了第一个规则:1.无论你何时实现equals方法,你必须同时实现hashCode方法如果你不这样做,你将会带来损坏的对象。为什么?一个对象的hashCode方法需耍与equals方法考虑同样的威。通过重写equals方法,你将申明一些对彖与其他对象相等

4、,但是原始的?hashCode方法将所有的对象看做是不同的。所以你将会有不同哈希码的相同对象。例如,在?HashMap中调用contains方法将会返回false,即使这个对象已经被添加。怎样写一个好的hashCode方法不在这篇文章的范围内,在JoshuaBloch很受欢迎的书《EffectiveJava》屮被很好的阐释,Java开发人员的书架上不应缺少这本书。【你的项口需要专业意见吗?我们的DeveloperSupport会为你解决问题。在我们的Software?Craftsmanship页面上寻找关于怎样编写简洁代码的更多提示。】为了安全起见,

5、让EclipseIDE一次产生equals和hashCode方法:Source>Generate?hashCode()andequals()•••・■AHKpieaVrtect2戸SelectAll・u$hoppingC4ftDeselectAHInsertionpointLastmemberGwneratemethodcommentsUseUnsUnceortoco

6、hashCode方法的类,并显示错谋。不幸的是,此选项默认是指为“忽略”:Preferences>Java>Compilcr>Errors/Warnings,然后用快速筛选器来搜索"hashcode":tifo*trfw>Werr4ngiIB*"、,[CrrorVW»H

7、«)-炬flM.TwwrCuwvgrARCrrori/Wwnfer^■bowwvwkbefaUIc«fi^to«rrcn

8、naM«conMMccd««ei«ovcU4lM«1j」■■■■更新:正如laurent指岀,equalsverifier是一个强大的工具,它用来验证hashCo

9、de?和equals方法的约定。您应该考虑在您的单元测试小使用它。哈希码冲突任何时候,两个不同对彖冇相同的哈希码,我们称Z为冲突。冲突不要紧,它只是意味着有多个对彖在同一个空间里,所以HashMap会再检查一遍来找正确的对象。大量的冲突将会降低系统的性能,但是它们不会导致错误的结果。但是如果你误认为哈希码是一个对象唯一的句柄,例如使用它作为Map的key,你有时会得到错谋的对象。因为虽然冲突很罕见,但他们是不可避免的。例如,字符“Aa”和“BB”产生相同的哈希码:2112o因此:1.永远不要把哈希码误用作一个key你可能会反对,不像打印机的类型例子,

10、在Java中,冇4,294,967,296的空间(2,32个可能的整型值)。40亿的插椚,发生冲突似乎是极不

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。