黑马程序员技术交流社区
标题:
Iterator接口实现问题
[打印本页]
作者:
高鑫
时间:
2012-6-14 23:16
标题:
Iterator接口实现问题
Iterator接口中有compare和equals两个方法,请问创建比较器的时候,不是应该把2个方法都实现了才能创建比较器吗?我们例题里就实现了compare这个方法就创建了啊,我哪里理解错了?
作者:
sbeeqnui1987
时间:
2012-6-14 23:28
1.Object的equals()方法比较的是地址值
2.String 、Math、还有Integer、Double。。。。等这些封装类重写了Object中的equals()方法,
让它不再比较句柄(引用),而是比较对象中实际包含的整数的值,即比较的是内容。
一般来说,如果你要把一个类的对象放入容器中,那么通常要为其重写equals()方法,
让他们比较地址值而不是内容值。特别地,如果要把你的类的对象放入散列(hash)中,那么还要重写hashCode()方法;
要放到有序容器中,还要重写compareTo()方法。
作者:
高鑫
时间:
2012-6-15 00:03
谁能在给个答案,我想问的是接口必须实现了全部方法才能创建对象,那Iterator怎么实现了方法?
作者:
揭耀祖
时间:
2012-6-15 01:08
TreeSet和TreeMap有需要传入比较器的构造函数,当你在集合中传入了比较器后,就使集合本身具有了可比较性,那么你这时只要复写比较器的compare()方法即可,在使用TreeSet和TreeMap时没必要复写equals()方法。
equals()方法是在使用hashSet或hashMap时才会用到的,当把对象存入hashSet或hashMap时,都会调用hashCode()计算出这元素的hash值,如果新存入的元素与集合中的其它元素有相同的hash值的话,再来调用equals()方法比较是否是同一个对象。
作者:
李盼
时间:
2012-6-15 07:45
Iterator接口中是没有compare和equals两个方法的,Iterator接口是迭代器,用于对collection或其子类进行进行迭代。
排序应该是对collection而言。因为equals是Object类的方法,Object是JAVA的超类,API文档中的绝大多数类都按照自己的需求复写了equals方法,所以我们没必要再去复写,如果元素是我们自定义的一个类,那么我们可以复写equals方法便于比较!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2