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;

}


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




  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值