Java面试宝典下载:http://download.csdn.net/source/3563084
Collection的两个子接口Set和List,Set中的元素要求是不重复的,因此要重写equals方法。而对于HashSet方法而言一定要重写hashCode方法。
在向HahSet中添加元素时,没添加一个元素要判断这个元素是否已经存在,因此就涉及到了两个实例对象的比较问题。
比较两个实例对象是否相等的步骤:
(1)判断hashCode的返回值是否相同,如果不同,则不是同一个实例对象,可以添加进去;否则就进去第(2)步;
(2)判断equals方法的返回值是否为true,如果为true则相同,否则不同。
下面简单实现了一下这两个方法:
public class UserInfo {
private String username;
private String password;
public UserInfo() {
}
public UserInfo(String _username, String _password) {
this.username = _username;
this.password = _password;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime*result + (username==null?0:username.hashCode());
result = prime*result + (password==null?0:password.hashCode());
return result;
}
@Override
public int equals(Object obj) {
if(this == obj) {
return true;
}
if(obj == null) {
return false;
}
if(!(obj instanceof UserInfo)) {
return false;
}
final UserInfo other = (UserInfo)obj;
if(this.username == null) {
if(other.getUsername() != null) {
return false;
}
} else if(!this.username.equals(other.getUsername())) {
return false;
}
if(this.password == null) {
if(other.getPassword() != null) {
return false;
}
} else if(!this.password.equals(other.getPassword())) {
}
return true;
}
//省去了对属性的get和set方法
}