hashmap中equals() 和hashcode(),请教

来源:百度知道 编辑:UC知道 时间:2024/09/23 23:45:26
在thinking in java中hashmap中说,如果key是自定义的类,那么必须得重载equals()和hashcode()两个方法,书中说的我没理解太清楚,所以我有了如下这么几个问题:
1)如果要比较key是否相等,得同时使用这两个函数,还是使用随便其中一个就可以了?我目前觉得不论equals()还是hashcode()都可以用来判断key是否相等,所以我不立即为何还要两个方法全都要重载,我任选一个来重载不可以吗?
2)对于set,如果存入的元素是自定义的类,是否也得重载equalis()和hashcode()这两个函数?
3)后来说的就更糊涂了,说还要实现comparable接口,以实现compareTo().难道为了一个对象比较是否相等,需要equals, hashcode和compareTo三个方法?不是有点过于啰嗦了吗?

1。HashMap中key的默认是使用Int的包装类,当你要使用自定义的类作为key的时候才要重载equals(),hashcode()方法.
原因如下:HashMap是使用散列的方法来进行快速查找.当进行查找的时候先将你hashmap中的key调用hashcode()方法得到一个散列值,所以这时就需要你对hashcode()方法进行重载,同时这个值对应的是一个LinkedList数组的下标,而这个LinkedList数组中存的就是你的value对象,然后hashmap调用equals方法对LinkedList数组中的value对象值进行比较。而默认的equals()方法是对对象的引用的比较,所以这是你同样要重载equals()方法.
2。set只是不允许重复,不用重载.
3.只判断对象equals就OK.