Object的hashCode()方法

参考博文:

hashcode:

hashCode是jdk根据对象的地址或者字符或者数字算出来的int类型的数值。支持此方法是为了提高哈希表(例如:java.util.Hashtable提供的哈希表)的性能。

作用:

已知散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。那么所以hashcode()作用就是提高效率。
当向集合中插入对象时,如何判别在集合中是否已经存在该对象了?(注意:集合中不允许重复的元素存在)
也许大多数人都会想到调用equals方法来逐个进行比较,这个方法确实可行。但是如果集合中已经存在一万条数据或者更多的数据,如果采用equals方法去逐一比较,效率必然是一个问题。此时hashCode方法的作用就体现出来了,当集合要添加新的对象时,先调用这个对象的hashCode方法,得到对应的hashcode值,实际上在HashMap的具体实现中会用一个table保存已经存进去的对象的hashcode值,如果table中没有该hashcode值,它就可以直接存进去,不用再进行任何比较了;如果存在该hashcode值, 就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址所以这里存在一个冲突解决的问题,这样一来实际调用equals方法的次数就大大降低了,说通俗一点:Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。

测试如下:

package cn.haiyan.basecode01;

public class HashCodeTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * Object类:
		 * 		   类Obejct是类层次结构的根类,每个类都使用Obejct作为超类
		 *       每个类都直接或间接继承自Object类
		 * Obejct类的方法:
		 *       public native int hashCode();返回该对象的hash码值。
		 *       注:哈希值是根据哈希算出来的一个值,这个值跟地址有关,但不是实际地址值。
		 * 
		 */
		Student s1=new Student();
		System.out.println(s1.hashCode());
		System.out.println(s1);
		System.out.println("---------------");
		Student s2=new Student();
		System.out.println(s2.hashCode());
		System.out.println(s2);
		System.out.println("---------------");
		Student s3=s2;
		System.out.println(s3.hashCode());
		System.out.println(s3);
	}

}

输出结果如下:

2018699554
cn.haiyan.basecode01.Student@7852e922
---------------
1311053135
cn.haiyan.basecode01.Student@4e25154f
---------------
1311053135
cn.haiyan.basecode01.Student@4e25154f
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值