1. 程式人生 > >Set 集合怎麼實現add()方法新增不重複?

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;

}


            此時再去新增 則只能新增一個 。