容器 第二节 重写equals和hashCode方法

第二节

容器类对象在调用remove、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法(主要用)和hashCode方法(当对象用在Map接口里面作为键,即作为字典的索引时才会用hashCode这个方法,因为hashCode这个方法效率会更高);对于自定义的类型(这里自定义了Name这个类),需要重写equals和hashCode方法以实现自定义的对象相等规则。

什么时候才需要重写equals和hashCode方法呢:自定义的类如这里的Name类,得重写equals和Name这两种方法如果是字符串例如该程序中的“f1”“l1”,她的内部已经自己写了equals和hashCode方法,这里就不用再重写了new Integer(100)也不用写equals和hashCode方法,因为Integer类中也自己重写了这两种方法


注意:相等的对象应该具有相等的hashCodes,hashCode非常适合做索引

这里在Name类添加的equals和hashCode方法如下:
public boolean equals(Object obj){
     if(obj instanceof Name){
       Name name =(Name) obj;
       return (firstName.equals(name.firstName))&&(lastName.equals(name.lastName));
     }
     return super.equals(obj);
  }
   public int hashCode(){
     return firstName.hashCode();

完整的程序如下:


输出结果是:

true

[   ]

刚试了一下,如果把重写的equals方法和hashCode方法注掉,输出结果就会是false  [f1  l1],所以要想删除new Name("f1","l1")这个对象,必须得重写equals方法和hashCode方法


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值