java容器之Equals方法

Set:沒有順序可以重複

List:有順序不可以重複 

所謂重複指的是兩個對象Equals,不是“==”,“==”指的是引用相等

Object本身的equals方法是等同於==的,即指向相同的引用

重寫equals方法時需要同時重寫hashcode方法。如果不重寫的話。兩個通過equals比較相同的對象卻有不同的hashcode()值。這樣,在對象被當做索引的時候,因爲索引需要用到hashcode,這樣就是成了兩個不同的索引,這顯然不符合通過之前equals判定的這兩個是同樣的對象

以people類爲例重寫equals方法

People:

package com.fw.proxy;

public class People {
	String name;
	

	public People(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	//重寫equals方法,只要兩個對象有相同的名字則認爲兩個對象equals
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof People) {
			if(((People) obj).getName()==this.getName()) {
				return true;
			}
			return false;  
		}
		return super.equals(obj);
		
	}
	//重寫equals方法的同時必須要重寫hashcode方法
	@Override
	public int hashCode() {
		/**
		 * this.getName()返回的是String類型,String類型已經重寫了equals方法。只要值相等
		 * 就會有相同的hashcode。
		 * 現在兩個equals的People對象會有相同的Name,相同的Name就會有相同的hashcode,所以
		 * 兩個equals的People會有相同的hashcode
		 */
		
		return this.getName().hashCode();
		
	}	
	
	

}

 

 

集合裏只能裝對象,不能裝一些基本變量,比如int類型。因爲基本變量是存放在棧上面的,很容易被清空

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章