A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© @白纸嘿字@   /  2015-9-30 01:14  /  3993 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是这样的,map集合本身拥有自然排序的功能,排序是根据对象的HASH值来排序的,因为对象每一个对象都有hashCode的方法,这个方法是继承与Object类的,但是你的Employe对象重写了hashCode方法,所以这时候对象的HASH值是你的方法自己设定的,当集合里存在2个HASH值相同的情况的时候,MAP集合的机制会去调用对象本身的equals方法,来比较出谁先谁后。这是调用的是对象的equals方法,这里你又重写了equals方法,你自己定义的equals方法就是进行年龄的比较。就实现了“按照年龄从小到大排序”。
回复 使用道具 举报
雨来 高级黑马 2015-10-13 15:26:06
22#
1、equals方法用于比较对象的内容是否相等(覆盖以后)
2、hashcode方法只有在集合中用到
3、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否等)。
4、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入
回复 使用道具 举报
理解就行了,但要回用,不要挖掘的太深,太深的东西,就算现在记住了,短时间内不用,也会忘了的
回复 使用道具 举报
当往HashMap集合里添加元素的时候,首先是执行hashCode方法,获取存入该键值对的位置,然后如果该位置没有其他键值对占用,那么直接存在这个位置;如果已经有键值对在这个位置了,那就调用equals方法,判断这两队键值对是否是一样的内容,若是则不存,若不是则可能以顺延的方式往后判断直到是空位置就存入的方式,也可能是其他的方式解决。希望可以帮到你!
回复 使用道具 举报
进来看看
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马