在实现Hash算法的集合里面,例如HashSet,该集合不能存放相同的数据,HashSet会根据对象的equals()和hashCode()方法来判断要存放的数据是否已经存在。Hash算法把HashSet划分成多个区域,每个区域就是以哈希码来作为该区域的唯一编码,而hashCode()的作用就是为某对象生成一个哈希码。Hash算法会认为如果两个对象的equals()比较后相等,那么它所对应的hashCode也应该相等,那么HashSet会从该哈希码所对应的那个区域来查找是否已经存在该对象数据,不存在则放进去。而如果只提供equals方法,不提供hashCode()方法,就算判断出两个对象引用相等,但是HashSet会在不同的区域下寻找是否有该对象,这样,HashSet会把相同的对象引用存放在两个不同的区域里面。注意:只有实现了Hash算法的集合hashCode才起作用。

例如:Set set = new HashSet();ReflectPoint rp = new ReflectPoint(3,4);//测试对象,根据其x,y属性来算出hashCodeset.add(rp);如果现在不需要rp数据了,想从内存中删除掉该对象引用,可以用set.remove(rp);此时可以清理出内存空间。但是如果修改了hashCode生成的x,y属性:rp.x = 66;此时调用set.remove(rp);,则无法删除该对象引用,因为改变了x属性的值,其hashCode也会改变,假如本来rp对象存放在A区域里面,hashCode一变,此时set.remove(rp)会从改变后的hashCode所对应的那个区域下寻找是否存在rp对象,存在就删除,而此时并不能找到,则不能删除掉,rp对象引用还会存放在内存中,占用内存空间,不被释放,造成内存的泄露。建议:不要轻易修改用于生成hashCode的属性。

HashCode()的作用的更多相关文章

  1. 讲讲HashCode的作用

    前言 Object提供给我们了一个Native的方法“public native int hashCode();”,本文讲讲Hash是什么以及HashCode的作用 Hash 先用一张图看下什么是Ha ...

  2. Java中hashCode的作用

    转  http://blog.csdn.net/fenglibing/article/details/8905007 Java中hashCode的作用 2013-05-09 13:54 64351人阅 ...

  3. java中的hashcode方法作用以及内存泄漏问题

    本文装载:http://hi.baidu.com/iduany/item/6d66dfc9d5f2da1650505870 hashCode()方法的作用&使用分析 一直以来都想写篇文章来说明 ...

  4. Java之hashCode的作用和equals方法的重构规则

    这个是博主对hashcode的初步理解,以后加深了会再来更新: 1.hashcode是什么? hashcode是对象的散列码,不同的对象几乎不一样,说几乎是因为还是可以一样的. 特点:每一个对象都有h ...

  5. [Java]hashCode的作用

    一.如何理解hashCode的作用: 以java.lang.Object来理解,JVM每new一个Object,它都会将这个Object丢到一个Hash哈希表中去,这样的话,下次做Object的比较或 ...

  6. hashCode的作用

    在一般的应用中你不需要了解hashCode的用法,但当你用到HashMap,HashSet等集合类时要注意下hashCode.     你想通过一个object的key来拿HashMap的value, ...

  7. [复习]java中hashCode的作用

    1.HashCode的官方文档定义 (1)hashcode方法返回该对象的哈希码值.支持该方法是为哈希表提供一些优点,例如java.util.HashTable提供的哈希表. (2)hashCode的 ...

  8. 【转】Java中hashCode的作用

    以下是关于HashCode的官方文档定义: hashcode方法返回该对象的哈希码值.支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表. hashCode  ...

  9. JAVA - hashcode与equals作用、关系

      Hashcode的作用 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set.前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复.      ...

随机推荐

  1. 洛谷 P1607 [USACO09FEB]庙会班车Fair Shuttle 解题报告

    P1607 [USACO09FEB]庙会班车Fair Shuttle 题目描述 Although Farmer John has no problems walking around the fair ...

  2. android脱壳之DexExtractor原理分析

    导语: 上一篇我们分析android脱壳使用对dvmDexFileOpenPartial下断点的原理,使用这种方法脱壳的有2个缺点: 1.  需要动态调试 2.  对抗反调试方案 为了提高工作效率, ...

  3. 如何加快JavaScript的加载与执行

    JS 有个很无语的阻塞特性,就是当浏览器在执行JS 代码时,不能同时做其他任何事情,无论其代码是内嵌的还是外部的. 浏览器在碰到一个引入外部JS 文件的<script>标签时会停下所有工作 ...

  4. bzoj1814 Ural 1519 Formula 1(插头dp模板题)

    1814: Ural 1519 Formula 1 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 924  Solved: 351[Submit][Sta ...

  5. java md5加密 不依赖base64包

    /** * MD5 加密 */ private String getMD5Str(String str) { MessageDigest messageDigest = null; try { mes ...

  6. sublime2创建一个html5的snippets文件

    背景:跟了一个网上课程,老师哗啦啦敲代码,屏幕上只敲了几个字,键盘一操作,瞬间一大溜代码,看得我心惊肉跳连忙暂停抄抄抄. 举个简单的例子,我需要创建一个html文件.但是我不想每次都敲固定的格式.那么 ...

  7. Spring学习--集合属性

    Spring 中可以通过一组内置的 xml 标签(例如: <list> , <set> 或 <map>) 来配置集合属性. 配置java.util.Set 需要使用 ...

  8. PHP文件操作函数二

    PHP部分文件访问函数总结: 1.filetype("文件路径")  //可以输出相关文件类型,返回之为:dir/file... 2.stat("文件名") / ...

  9. usaco 月赛 2005 january sumset

    2013-09-18 08:23 打表找规律 w[i]:=w[i-1];  奇 w[i]:=w[i-1]+w[i div 2];     偶 //By BLADEVIL var w :..] of l ...

  10. Splunk笔记

    学习Splunk Fundamentals Part 2 (IOD) 和 Splunk Fundamentals Part 1课程的笔记. Chart Over By Tips: ….|chart c ...