我试图理解contains()以及Object类
的equals和hashCode方法以下是我的课程Test1
public class Test1 {
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((favoriteUID == null) ? 0 : favoriteUID.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Test1)) {
return false;
}
Test1 other = (Test1) obj;
if (favoriteUID == null) {
if (other.favoriteUID != null) {
return false;
}
} else if (!favoriteUID.equals(other.favoriteUID)) {
return false;
}
return true;
}
private String favoriteUID;
public String getFavoriteUID() {
return favoriteUID;
}
public void setFavoriteUID(String favoriteUID) {
this.favoriteUID = favoriteUID;
}
}
那是我的主要课程
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class FavoriteMain
{
public static void main(String[] args)
{
Test1 obj1 = new Test1();
obj1.setFavoriteUID("1");
Test1 obj2 = new Test1();
obj2.setFavoriteUID("1");
List<Test1> list1 = new ArrayList<Test1>();
list1.add(obj1);
list1.add(obj2);
List<Test1> list2 = new ArrayList<Test1>();
list2.add(obj1);
System.out.println(obj1.equals(obj2 ));
System.out.println(list1.contains(list2));
}
}
输出
true
false
我是嗡嗡声,为什么我变得虚假,即使我的hashCode和equals方法正常工作。这就是为什么我的equals方法返回true的原因。
任何输入都会有所帮助。
谢谢!!!
答案 0 :(得分:2)
因为contains(Object o);
将在列表中查找对象,为了返回true,您需要添加列表本身,这没有多大意义。如果您改为使用list1.contains(obj1);
,那么您将得到真实,因为该实际对象存在于列表中。
您可以使用containsAll(Collection<?> c);
来获取列表,并检查提供的列表中的所有元素是否都存在于被调用的列表中。