LinkedList对equals的定义大致是这样的:(下文将equals 写作 相等)
两个链表相等当且仅当其大小相等,并且每个对应元素也相等。
谈到相等,必须谈及hashCode方法,关系如下:
hashCode相等的 可能相等(相等与否需进一步检测)
hashCode不等的 一定不等(排除相等情况)
一般情况下,hashCode的计算一定比equals快,而且‘不等’的情况较多,因此作为判断相等的加速方案,java会先检测hashCode,若不等,则对象一定不等。
那么,对于java的常见类,例如:基本类型包装类、集合类、字符串类等 其 equals 与 hashCode已经写好,不用我们操心。
若是自定义类,一定要重新equals与hashCode方法,满足上述hashCode的2个关系。
例如自己的User类有name和pass,一个简单的方案如下:
public class User{
String name,pass;
//get/set....
public int hashCode() {
return name.hashCode + pass.hashCode();
}
public boolean equals(Object o) {
if(o instanceof User) {
User u = (User)o;
return (name.equals(u.name))&&(pass.equals(u.pass));
}
return false;
}
}