equal hashcode compareTo使用时机

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);

}

}

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2343712
今日推荐