hash code

   摘自java核心技术卷一13.2.3

    有一种数据结构,可以快速地查找所需要的对象,这就是散列表(hash table)。散列表中存储对象的散列码(hash code),具有不同数据域的对象将产生不同的散列码。

    散列表通过链表数组实现,每个链表被称为桶。对象的散列码与桶的总数取余所得结果就是保存这个元素的桶的索引。java集合类库提供了一个HashSet类,主要特点是不能存放重复的元素,采用散列的存储方式。集合中添加元素,需查看集合中是否已经存在相同的元素,通过元素散列码与桶数取余可以得到要保存这个元素的桶的位置,查看桶中若无元素直接存入,桶中若有元素再使用equals()方法比较,而不必比较集合中的所有元素,实现快速查找所需要的对象。

    由于hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址,hashCode方法可以重写。如果重新定义equlas方法,就必须重新定义hashCode方法,以便用户可以将对象插入到散列表中。例如学生类中有学号、姓名两个属性,若重新定义equals方法中比较的是学号和姓名,那么hashCode的方法中就要散列学号和姓名。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值