hashCode方法作用 内存泄漏问题

本文探讨了hashCode方法在HashSet集合中的应用,解释了对象如何通过hashCode和equals方法实现高效存储与检索。同时,文章强调了类实例在被用于哈希算法前需要正确覆盖hashCode方法的重要性,以及修改参与计算hashCode属性的潜在风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 hashCode方法和hashSet类

对象只有存在HashSet集合中才可以使用hashCode算法。

hashCode方法提高了从集合中存取元素的速度,由于set集合中的元素是不允许重复的。

在set中存取元素的过程:

1.首先调用hashCode()方法计算出元素的hashCode。

2.根据hashCode值找到其对应的存储区域。

3.取出该区域内的各个元素与之相比较,即调用对象的equals方法。


    只有类的实例对象要被采用哈希算法进行存储和检索时,这个类才需要要求覆盖hashCode方法。即使程序可能暂时不会使用到该方法,但是通常都会覆盖hashCode方法和equals方法。

    当一个对象被存储进hash集合以后,就不能再修改对象中参与计算hashCode的属性,否则将造成内存泄漏问题。表面上程序代码不断地增加对象,删除对象,但实际上内存中并未删除该对象,即使以后不使用了,还一直存在于内存中。

package cn.itcast.day;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

public class ReflectTest {

 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  //Collection collections =new ArrayList();//创建集合 4 有顺序的集合
  Collection collections =new HashSet();// 比较里面有相同对象没有 有的话就不放
  ReflectPoint pt1=new ReflectPoint(3,3);
  ReflectPoint pt2=new ReflectPoint(5,5);
  ReflectPoint pt3=new ReflectPoint(3,3);
  collections.add(pt1);
  collections.add(pt2);
  collections.add(pt3);
  collections.add(pt1);
  
  pt1.y=7;
  collections.remove(pt1);
  System.out.println(collections.size());

 }



本文参考于http://blog.sina.com.cn/s/blog_7b1cae8d0100r5rz.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值