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类型。因为基本变量是存放在栈上面的,很容易被清空