同时重写hashcode和equals方法

同时重写hashcode和equals方法

1.向Map集合中存,以及Map集合中取,都是先调用key的hashCode方法,然后再调用equals方法。equals方法有可能调用,也有可能不调用。

​ 拿put(k,v)举例,什么时候equals不会调用?

​ k.hashCode()方法返回哈希值。

​ 哈希值经过哈希算法转换成数组下标。

​ 数组下标位置上如果是null,equals不需要执行。

拿get(k)举例,什么时候equals不会调用?

​ k.hashCode()方法返回哈希值。

​ 哈希值经过哈希算法转换成数组下标。

​ 数组下标位置上如果是null,equals不需要执行

2.注意:如果一个类的equals方法重写了,那么hashCode()方法必须重写。并且equals方法返回如果是true,hashCode()方法返回的值必须一样。

​ equals方法返回true表示两个对象相同,在同一个单向链表上比较。那么对于同一个单向链表上的节点来说,它们的哈希值都是相同的,所以hashCode()方法的返回值也应该相同。

3.hashCode()方法和equals()方法不用研究了,直接使用IDEA工具生成,但是这两个方法需要同时生成。

4,终极结论:

​ 放在HashMap集合key部分的,以及放在HashSet集合中的元素,需要同时重写hashCode方法和equals方法。

5.对于哈希表数据结构来说:

​ 如果o1和o2的hash值相同,那么一定是放在同一个单链表上

​ 但是,在同一个单链表上的o1和o2的hash值不一定相同,因为它们可能在哈希算法结束之后转换的数组下标相同,这样的话就会发生”哈希碰撞“。

6.HashMap扩容之后的容量是原容量的2倍

7.HashMap集合key部分允许为null吗?

			允许的

但是要注意: HashMap集合的 key null值只能有一个,因为不可重复,value重复的话会被覆盖掉

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值