kingsundi 2019-03-31
我这里没有深入到底层,底层请大家去爬源码吧
面试官:Java中的hashCode和equals关系说下
程序员:这个(已经慌了,背的理论早忘记了)
面试官:好的,你可以回去等消息了
源码注释特别长,我大概总结下,像Hash开头的类,HashMap、HashSet、Hash等等
哈希代码值可以提高性能
实现了hashCode一定要实现equals,因为底层HashMap就是通过这2个方法判断重复对象的
理论我反正看的头疼,还是上代码来理解下吧
老规矩idea生动生成
注释很详情
注释很清楚了,HashSet去重是怎么判断的
如果缺少hashCode或equals方法
输出结果(不会去重)
set:[wang - 100, wang - 100, WANG - 100, java - 200]
HashSet是不允许有重复元素的
场景:HashSet存入10万数据,当add第10万零1个元素的时候,
底层源码可不是一个个遍历去判断重复元素,
是通过hash值去判断的
源码
HashSet
已经到HashMap了
通过对象的hashCode()方法计算出哈希值
源码非常复杂,我也是利用idea工具,把变量值放到
下面New Watch里面,整个数据情况就出来了