java中内存泄露问题与hashcode的作用是一个问题吗?下面是我自己的总结我总觉得不全面希望各位大神指点一下
hashcode的作用?
只有类的实例对象要被采用哈希算法进行存储和检索,这个类才需要覆盖hashcode方法。
当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以 直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散 列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
所以,Java对于eqauls方法和hashCode方法是这样规定的:
1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同
java中有内存泄露吗?
当一个对被存储进hashset集合中以后就不能修改那些参与计算哈希值的字段了,否则对象修改后的哈希值与最初存储进hashset集合中 时的哈希值就不同了,在这种情况下,即使在contains方法中使用该对象的当前引用作为的参数去hashset集合中检索对象,也将返回找不到对象的结果, 这也会导致无法从hashset集合中单独删除当前对象,从而造成内存泄露。 |