重写hashcode() AND equals()的作用

本文解析了在Java中重写hashCode()和equals()方法的重要性,尤其是在Map中的应用,并介绍了如何通过实现Comparable接口和Comparator接口来自定义对象排序。

重写hashcode() AND equals()的作用

1.hashCode()方法使用来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的桶里面,Map在搜索一个对象的时候先通过hashCode()找到相应的桶,然后再根据equals()方法找到相应的对象.要正确的实现Map里面查找元素必须满足一下两个条件:
. x' t; J6 ]0 v3 k(1)当obj1.equals(obj2)为true时obj1.hashCode()   ==   obj2.hashCode()必须为true - R1 M$ V8 ^* U$ M( K
(2)当obj1.hashCode()   ==   obj2.hashCode()为false时obj.equals(obj2)必须为false
3 m: @5 d' i  S! [) t
0 M# a/ k8 n# ]$ b8 O" q( v0 s) b2.一个类实现Comparable接口是用来决定该类对象的自然顺序,这样把该类对象放入TreeSet,TreeMap,时会根据该类对象的自然顺序自动进行排序,另外往Queue里面存的时候也会根据对象自然顺序排序 ' f8 Y4 r* D8 Q4 }# T; p9 F# L
: T4 s9 C: Y9 d7 P- Q8 m) z0 G
3.光实现Comparable只能决定该类对象自然顺序,但是很多时候需要自定义排序规则,那么就要实现
( y% F8 \& O7 G" a7 L7 iComparator接口,例如一个People实现了Comparable接口并且定义自然顺序为按照名字字母顺序排序,那么把People存到List里面的时候可以用Collections.sort()方法根据自然顺序对该List进行排序,问题就在于我现在要把People按照年龄排序该怎么办呢?一个类实现了Comparable只能重写compareTo()方法一次,那么也只能有一种顺序--自然顺序,但是为了可以用age大小排序这个List的话,就必须使用一个类实现Comparator并且重写compare()方法,定义按照age排序的规则,然后调用Collections   的   static   <T>   void   sort(List <T>   list,   Comparator <?   super   T>   c)   这个方法来按照指定比较器规定的顺序来对List排序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值