重写hashcode() AND equals()的作用
. 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排序
本文解析了在Java中重写hashCode()和equals()方法的重要性,尤其是在Map中的应用,并介绍了如何通过实现Comparable接口和Comparator接口来自定义对象排序。
408

被折叠的 条评论
为什么被折叠?



