HashCode
1.用于往散列的数据结构的集合(Set,HashSet,HashMap等)增加对象时(map.put),获取Hash地址,对集合进行类似分区编码的工作,提高集合查询性能。Hashcode只有在集合中用到。
2.将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入。
Equals
1.equals方法用于比较对象的内容是否相等。
2.重写equals方法的时候必须重写hashCode方法,以保证集合工作正常。
3.原有的equals方法只比较对象的引用是否为同一个,重写equals方法,将增加其它比较条件。
如:下面重写equals方法(只加入username和password字段),用于比较两个对象中当username与password相同时,则认为两个对象为同一个对象
public class User {
private Integer id;
private String username;
private String password;
...
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((password == null) ? 0 : password.hashCode());
result = prime * result
+ ((username == null) ? 0 : username.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (password == null) {
if (other.password != null)
return false;
} else if (!password.equals(other.password))
return false;
if (username == null) {
if (other.username != null)
return false;
} else if (!username.equals(other.username))
return false;
return true;
}
}