Set 集合怎麼實現add()方法新增不重複?
阿新 • • 發佈:2018-12-30
//新增一個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;
}
此時再去新增 則只能新增一個 。