重写hashCode的成员变量发生变化,Set中对象无法找到
1、使用对象的hashCode函数来初步确定内存位置,如果该位置没有存储对象,则将此对象存放于此
2、如果hash函数直接计算出的内存地址空间已经有对象存在,则会使用对象的equals判断对象是否相等,如果不相等则顺序查找下一个空闲的内存空间;如果有相同对象存在,则Set中不能存储该重复对象
当一个对象被存储进hashSet集合中以后,就不能修改这个对象中的那些参与hash值计算的字段了,否则,对象修改后的hash值就不同了,这种情况下,即使在contains方法使用该对象的当前引用作为参数去hashSet结合中检索对象的,也将返回找不到对象的结果,这也将导致无法冲hashSet中集合中单独删除当前对象,从而造成内存泄露。所谓内存泄露也就是说有一个对象不被再使用,但它一直占有内存空间,没有被释放。
时间: 2024-10-10 09:51:08