equal hashcode compareTo使用时机
http://blog.csdn.net/afgasdg/article/details/6889383
总结:(使用时机)
1、equals方法用于比较对象的内容是否相等(覆盖以后)
2、hashcode方法只有在集合中用到
3、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等)。
4、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。
如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入。
removeall重写equal
list<A> a list如果要调用remove(bo),或者removeAll(a) 需要重写A 的equals方法,因为remove,removeAll方法时两个从左边移除与右边相等的对象,
那么在未重写equals方法的情况下,用默认的,默认的equals方法时比较两个对象的存储位置是否一致,以确定相等,这显然不符合业务需要,我们需要重写,让其
根据id等少数几个字段判断(有些方法会自动调用equals,然后根据equals返回的结果再执行相应的操作,比如list的removeAll,为了符合业务需要需要重写)
A Bean:类中
compareTo equals toString 起作用时机
equals 重写之后要重写 hashcode
Collections.sort(localTree1.getSonList());//用这个的时候实体要实现Comparable接口,写compareTo方法(Tree),类似list.removeAll();要实体类复写equals一样
public int compareTo(Object arg0)
{
if (arg0 == null) {
return 1;
}
if (Integer.valueOf(this.type).compareTo(Integer.valueOf(((Tree)arg0).getType())) == 0) {
return Integer.valueOf(this.displayOrder).compareTo(Integer.valueOf(((Tree)arg0).getDisplayOrder()));
}
return Integer.valueOf(this.type).compareTo(Integer.valueOf(((Tree)arg0).getType()));
}
public boolean equals(Object arg0)
{
if (arg0 == null) {
return false;
}
MenuFolder po = (MenuFolder)arg0;
return this.id.equals(po.getId());
}
//标准的写法是重写equals一定要重写hashcode方法,因为equals相等hashcode一定要相等(这是规范,牵涉到用一些数据结构时的内部判断),反之不一定可以不管
public int hashCode()
{
return this.id.hashCode();
}
打印对象时
System.out.println必须实现toString方法
public class BasAreaBeanVo implements Serializable {
private static final long serialVersionUID = 1L;
private String areaKey;
public String toString(){
return ToStringBuilder.reflectionToString(this);
}
}