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類型。因爲基本變量是存放在棧上面的,很容易被清空