Java Class 中hashCode()和equals方法

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方法
}
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值