1. set的定义:
private Set<Doc> aSet = new HashSet<>();
2.由于set的contains(Object)函数,只能是对于有相同变量地址的对象返回TURE。否则就返回false。
考虑下面的情况,如果set中已经有一个aDOC的对象,现在new 一个新的aDoc的数据成员和aDOC完全相同。
contains(aDoc)将会返回false。因为这两个对象的引用指向不同的地址。
因此,对应的解决办法如下:
/**
* 重写equals方法,最佳实践就是如下这种判断顺序
*/
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Doc))
return false;
if (obj == this)
return true;
Doc aDoc = (Doc) obj;
if (this.getDocId() == aDoc.getDocId() ) {
return true;
}
return false;
}
/**
* 重写hashCode方法
*/
@Override
public int hashCode() {
String hashCodeMsg = this.getDocId() + "_" +this.getDocDegree();
return hashCodeMsg.hashCode();
}
我在类里面重写了equals函数 和hashCode()两个函数,其中docId,以及docDegree是类的两个数据成员。
这样如果再有数据成员相同的新的doc对象往里面添加的时候,contains就会返回true啦啦啦!!!