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(animal1);
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;

}


            此时再去添加 则只能添加一个 。 




猜你喜欢

转载自blog.csdn.net/yuanboqi/article/details/79756266