黑马程序员技术交流社区

标题: 关于一道java中set集合的面试题 [打印本页]

作者: 陈晓东    时间: 2011-10-7 16:40
标题: 关于一道java中set集合的面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
答案:
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 equals()和==方法决定引用值是否指向同一对像equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==用于比较引用和比较基本数据类型时具有不同的功能。

我的的问题是 为什么使用iterato()方法来区分?如何区分?(本人感觉是用equals区分的,因为JPI中写的很明白:“set 不包含满足e1.equals(e2) 的元素对 e1 和 e2 ”,由此可见回答使用equals()区分更合适。但是网上众多都是说用iterator()来区分,而且也讲不出个所以然来)。用懂的可以讨论的。




作者: 林国锋    时间: 2011-10-7 19:11
==是用于比较两个对象是否相同
equals是用于比较两个对象的内容是否相同
iterator()方法对Set中的元素进行迭代,在迭代过程中判断其元素是否重复,重复的元素就不会加到该Set中,因为HashSet有一个add方法,看源码add方法返回的正是map的put方法
public boolean add(E e) {
        return map.put(e, PRESENT)==null;
}
然后map.put方法里有判断元素是否存在的方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2