永发信息网

按理说一个非抽象类实现了一个接口不应该实现这个接口全部的方法嘛?可是在think in java实现Comparator

答案:10  悬赏:70  手机版
解决时间 2021-03-27 12:18
却未实现equals方法呢?
public class AlphaComp implements Comparator {
public int compare(Object o1, Object o2) {
// Assume it's used only for Strings...
String s1 = ((String)o1).toLowerCase();
String s2 = ((String)o2).toLowerCase();
return s1.compareTo(s2);
}
public static void main(String[] args) {
最佳答案
真是很细心,这个问题从来没有想过
Ojbect类中的equals
    public boolean equals(Object obj) {
        return (this == obj);
    }现在问题变成了为什么Comparator要有
boolean equals(Object obj);方法

请一定要记住实现了Comparator方法,最好不要覆盖equals方法   
下面英文的大概意思是你覆盖了Comparator的equals方法最好是不要把这个类的相关逻辑掺和进来,因为一个普通的类覆盖了equals方法都会检查某些属性是否相等,但是比较器就应该比较比较器本身是否相等

In common java objects, we will decide two objects are equal by checking its one or more than one instance variables.   
Form javaDoc Comparator   

return true -> only if the specified object is also a comparator and it imposes the same ordering as this comparator.Means we need to check for its business logic (This is what really makes two comparators objects equal)   
Also from JavaDoc 

Note that it is always *safe not* to override Object.equals(Object).Since the POJO class can have its own equals() which would check for some of its instance variables(Which makes it really unique). If we implement comparator interface in the same POJO class and provide the equals () for comparator then we cannot check equality for POJO class, vice versa. That is the reason it mentioned it's not to override equals(). 
As explained earlier this is to 'just to expand on the general contract of the method'. So that we would treat comparator equals() is different from POJO equals() .    



下面是引用自另一篇文章:
The equals( ) method, shown here, tests whether an object equals the invoking comparator:
boolean equals(Object obj)obj is the object to be tested for equality. The method returns true if obj and the invoking object are both Comparator objects and use the same ordering. Otherwise, it returns false.
Overriding equals( ) is unnecessary, and most simple comparators will not do so.
如果覆盖了Comparator是比较他们都是比较器,并且是使用相同的比较策略,所以一般不要覆盖




再说了比较器本身的用途就是用来比较,某些模型不应该实现这个接口,为什么Comparator要麻烦的写出这个方法,是要告诉我们正确覆盖这个equals方法的方式,但是由于Object中已经有这个这个方法的实现了,所以一般实现Comparator是不需要覆盖这个equals方法的,覆盖也是没有意义的,所以thinking in java的作者就正确地没有覆盖这个可以不需要覆盖的方法
全部回答
在Object里实现了
因为Object里面有个默认的equals实现
1楼是对的,因为已经有equals方法了,所以算作实现了接口中的方法
事实上所有对象都继承了Object这个基础类, 而object本身就有equals方法 所以相当于每个对象都有equals方法, 所以如果你看到类里面有equals方法,一般都是override的
你好! 事实上所有对象都继承了Object这个基础类, 而object本身就有equals方法 所以相当于每个对象都有equals方法, 所以如果你看到类里面有equa缉供光佳叱簧癸伪含镰ls方法,一般都是override的 仅代表个人观点,不喜勿喷,谢谢。
去新浪看看 哪里有免费领卡和测试帐号的地方 不过抢得人很多 你最好到深夜比如3 .4点上去抢 或早点起 或者直接申请个新浪账号能直接领、、
正好我需要
看到这样的问题真是笑喷。“免费领”还收取“材料费300”哪还是免费吗?没发现自己说话都有语病前后矛盾。以后别相信什么免费的。
B解析Simon,Kitty说她昨天把一本漫画书落在你家里了。把某物落在某地,用leave,昨天发生的,用一般过去式。选B。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
apache能当java的服务器么?
歌词求取黄河十八湾是什么歌中的歌词
千年玄冰、奉宫欲史类似的。
仁和老北京足贴是贴一只脚还是两只脚
概率计算10选7
封印的意思是什么?
何洁赫子铭离婚原因被曝 是赫子铭出轨还是何
wow 要塞哈里森琼斯成就 别叫我二世 小号共享
开封籍明星有哪些
60岁患者,左眼面部一直跳,现在能挂号吗
大阪周游卡 为什么淘宝比如本便宜
WIIU兼容CD,DVD吗?
圆通快递,5604.4738.5412的账单到哪了
欠债六百万能判几年
4M宽带 360测试下载速度只有135K/S 是怎
推荐资讯
王者荣耀,为什么偶尔有人可以买重复的装备
运动精品上职称算不算
古人如何点火?
8×19s—12.7mm锰系磷化涂层电梯钢丝绳知道破
下列变化属于化学变化的是A.分离液态空气B.晾
七八十年代出口的玉石盆景值钱吗
兰度手表是哪个国家的啊,是瑞士产的吗?
失业职工最低生活保障金是多少?
电视机14核,10核,真14核是什么意思
我手机三星note2N7108 双清后(双清好多次了
实验室制备少量碘乙烷:将红磷粉末放入乙醇里
谁知道这个韩国美女是谁。经常街拍
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?