第七条:改写equals尽量遵守的约定
7.1 在进行比较时,不需要进行 null 值比较,可以直接采用instanceof 中为null则直接返回false
7.2 域的比较顺序也会影响性能,最新比较的域应该是最容易发生改变的域。
7.3 改写equals的时候一般要改写hashCode()
7.4 不要让equals方法过于聪明
7.5 不要让equals依赖于不可靠的因素
7.6 不要把其中的Object替换成其他的对象
如:
@Override
public boolean equals(OutOfMenery arg0)
{
return false;
}
一个相对较好的equals方法
@Override
public boolean equals(Object arg0)
{
if (!(arg0 instanceof OutOfMenery)) return false; //这里已经做了null值判断
if (arg0 == this) return true;
OutOfMenery cMenery = (OutOfMenery)arg0;
return cMenery.size == this.size;
}
第八条:重写equals必须重写hashCode
8.1规范
1. 同一个程度中如果对象的值没有变化,那么多次调用hashCode方法必须返回同一个整数
2. 如果两个对象的equals方法相同,那么调用hashCode的方法也必须相同
3. 如果两个对象的equals方法不用,不要求hashCode的方法返回相同的值,不过为了散列跟均匀,建议返回相同的值。
8.2 非常不建立使用下种方式来实现hashCode,因为如此会将一个散列表整成一个链表。导致线性运行的程序成平方运行时间。
@Override
public int hashCode()
{
return 42;
}
7.1 在进行比较时,不需要进行 null 值比较,可以直接采用instanceof 中为null则直接返回false
7.2 域的比较顺序也会影响性能,最新比较的域应该是最容易发生改变的域。
7.3 改写equals的时候一般要改写hashCode()
7.4 不要让equals方法过于聪明
7.5 不要让equals依赖于不可靠的因素
7.6 不要把其中的Object替换成其他的对象
如:
@Override
public boolean equals(OutOfMenery arg0)
{
return false;
}
一个相对较好的equals方法
@Override
public boolean equals(Object arg0)
{
if (!(arg0 instanceof OutOfMenery)) return false; //这里已经做了null值判断
if (arg0 == this) return true;
OutOfMenery cMenery = (OutOfMenery)arg0;
return cMenery.size == this.size;
}
第八条:重写equals必须重写hashCode
8.1规范
1. 同一个程度中如果对象的值没有变化,那么多次调用hashCode方法必须返回同一个整数
2. 如果两个对象的equals方法相同,那么调用hashCode的方法也必须相同
3. 如果两个对象的equals方法不用,不要求hashCode的方法返回相同的值,不过为了散列跟均匀,建议返回相同的值。
8.2 非常不建立使用下种方式来实现hashCode,因为如此会将一个散列表整成一个链表。导致线性运行的程序成平方运行时间。
@Override
public int hashCode()
{
return 42;
}