Set 集合怎么实现add()方法添加不重复?
//添加一个set集合
Set set=new HashSet();
Animal animal1=new Animal("dongwu",2);Animal animal2=new Animal("dongwu",2);
Animal animal3=new Animal("dongwu",2);
//set集合中添加三个对象
set.add(animal2);
set.add(animal3);
//输出集合元素个数
System.out.println(set.size());//输出3
但是三个对象的值是一样的 怎么判断呢?
//set集合存储时先判断其hashCode()值一样吗,不一样直接存 此时不一样 所以直接存
但是三个对象的值是一样 ,所以 如果要比较三个对象的值必须重写 hashCode 方法
重写 如下:
先简单做一个示例 返回Animal的年龄属性 结果如下:
它的hashCode值 是一样的 但是还是添加了三个 这个结果不是我们期望的 这是因为//set集合存储时先判断其hashCode()值一样吗,不一样直接存 若一样再调用equals方法进行比较 所以不仅要重写hashCode方法 还要重写 equals方法
重写如下:
public boolean equals(Object obj)
{
//如果传进来的对象和当前对象一样 直接返回true
if(this ==obj){
return true;
}
//如果传进来的对象可以强转为Animal对象 则强转为Animal对象
if(obj instanceof Animal){
Animal animal=(Animal)obj;
//名字和年龄都一样就返回true 若有一个不同返回false
return this.name.equals(animal.getName())&&this.age==animal.getAge();}
return false;
}
此时再去添加 则只能添加一个 。