Java Class 中hashCode()和equals方法

来源:互联网 发布:淘宝的ios退款店都关了 编辑:程序博客网 时间:2024/06/08 06:34

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;}@Overridepublic 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;}@Overridepublic 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方法}