使用HashSet可能会导致内存泄漏的原因
* 内存泄漏: 就是当前内存中已经没有使用这个对象,但它仍然还停在内存中,没有被释放,一直占用着内存空间.
//equals方法默认比较的是否为同一对象的引用.
/*哈希算法: 用来手提高从元素中查找元素的效率,将集合分成若干个区域,每一个对象都可以计算出一个hashCode,
* 可以将hashCode分组,每一组分别对应一个存储区域.根据对象的哈希值,就可以确定对象存储在哪个区域 。
*
* HashSet就是采用合希算法存取对象的集合。
* 它的内部采用了对某个数字n进行取余的方式对哈希码进行分组和划分对象存储区域,Object类中对义了hashCode()方法,用来返回每个Java对象的哈希值,
* 当从HashSet中查找某个对象时,Java系统首先首先调用对象的hashCode()方法获得该对象的哈希码,然后根据哈希码找到对应的区域,然后取出该区域的每个对象
* 使用equals方法进行比较,这样不用遍历集合中所有的对象就可以得到结果。可见HashSet集合有很好的对象检索性能,但是HashSet集合存储的性能要低些。
* 因为向HashSet集合添加对象时,要先计算它的HashCode值和根据这个hashcode来确定这个对象在集合中存放的位置.
* 为了保证一个类的实例对象在HashSet中正常存储,要求这个类的二个实例对象用equals方法比较相等时,他们的hashcode值也必须相等,
* 也就是说 obj1.equals(obj2) ,则要有:obj1.hashCode() == cbj2.hashCode()
*
* 当一个对象被存放到HashSet以后,就不能再修改这个对象的那些参与计算哈希值运算的字段了.否则,对象修改后的哈希值与最初存储进HashSet时的hashcode值不
* 再相等,在这种情况下即使在使用contains()方法使用当前对象去HashSet检索时,也将返回不同对象的结果,这也会导致无法从hashSet()中删除当前对象,从而就导致了内存泄漏