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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-6-14 23:16  /  1465 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Iterator接口中有compare和equals两个方法,请问创建比较器的时候,不是应该把2个方法都实现了才能创建比较器吗?我们例题里就实现了compare这个方法就创建了啊,我哪里理解错了?

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
1.Object的equals()方法比较的是地址值
2.String 、Math、还有Integer、Double。。。。等这些封装类重写了Object中的equals()方法,
让它不再比较句柄(引用),而是比较对象中实际包含的整数的值,即比较的是内容。
    一般来说,如果你要把一个类的对象放入容器中,那么通常要为其重写equals()方法,
让他们比较地址值而不是内容值。特别地,如果要把你的类的对象放入散列(hash)中,那么还要重写hashCode()方法;
要放到有序容器中,还要重写compareTo()方法。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谁能在给个答案,我想问的是接口必须实现了全部方法才能创建对象,那Iterator怎么实现了方法?
回复 使用道具 举报
TreeSet和TreeMap有需要传入比较器的构造函数,当你在集合中传入了比较器后,就使集合本身具有了可比较性,那么你这时只要复写比较器的compare()方法即可,在使用TreeSet和TreeMap时没必要复写equals()方法。
equals()方法是在使用hashSet或hashMap时才会用到的,当把对象存入hashSet或hashMap时,都会调用hashCode()计算出这元素的hash值,如果新存入的元素与集合中的其它元素有相同的hash值的话,再来调用equals()方法比较是否是同一个对象。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Iterator接口中是没有compare和equals两个方法的,Iterator接口是迭代器,用于对collection或其子类进行进行迭代。
排序应该是对collection而言。因为equals是Object类的方法,Object是JAVA的超类,API文档中的绝大多数类都按照自己的需求复写了equals方法,所以我们没必要再去复写,如果元素是我们自定义的一个类,那么我们可以复写equals方法便于比较!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马