【正确答案】HashSet是存在于java.util包中的类,HashSet中存储的元素是不能重复的,由于HashSet中存放的是对象,那么如何判断两个对象是否相同呢?主要通过hashCode和equals两个方法来判断,所以,对于在HashSet中存储的对象,对应的类最好根据实际情况实现自己的equals方法和hashCode方法。
每当向HashSet中添加一个元素的时候,可以采用下面的方法来判断两个对象是否“相同”:
1)如果两个对象的hashCode值不同,那么说明两个对象不“相同”。
2)如果两个对象的hashCode值相同,接着会调用对象的equals方法,如果equlas方法的返回结果为true,那么说明两个对象“相同”,否则,说明两个对象不“相同”。
有读者可能对hashCode方法与equals方法不是很理解,其实,hashCode方法和equals方法都定义在Object类中,所有的Java类都继承这两个方法。其中,hashCode方法返回一个int类型的数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”。而equals方法主要用于判断对象的内存地址引用是否是同一个地址(是否是同一个对象),如果两个对象“相同”,那么返回true,否则,返回false。一般情况下需要重写equals和hashCode方法来实现自己的逻辑,比如String类中的equals方法用来判断两个字符串的内容是否相同。
HashSet采用上面的逻辑来判断两个对象是否“相同”,从而决定一个对象是否应该被加入到HashSet中。
示例:下列程序中构造了一个Set并且调用其方法add(),输出结果是什么?
public class A
{
public int hashCode(){return 1;}
public Boolean equals(Object b){return true}
public static void main(String args[]){
Set set=new HashSet();
set.add(new A());
set.add(new A());
set.add(new A());
System.out.println(set.size());
}
}
答案:1。
【答案解析】