原创

Java中equal()函数与hashcode()函数使用分析

        java中Object对象重写equal()函数与hashcode()函数,先要明白equal()函数对于任何非空引用值仅当两个值引用同一个对象时此方法才返回true,此处不解释如果不明白可以在本网站搜索equal与==的区别。重写时必须保证hashcode()函数的常规规范,该规范声明相等对象必须具有相同的哈希码。


如何实现hashcode哈希码相等,具体代码如下:

1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true 

2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false


代码演示,具体代码如下:

package com.yoodb;

public class Number {
	private String a;

	public String getA() {
		return a;
	}

	public void setA(String a) {
		this.a = a;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((a == null) ? 0 : a.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;
		Number other = (Number) obj;
		if (a == null) {
			if (other.a != null)
				return false;
		} else if (!a.equals(other.a))
			return false;
		return true;
	}

	public Number(String a) {
		super();
		this.a = a;
	}
	
}


总结:

hashcode()函数是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信