hash code

来源:互联网 发布:ubuntu qemu kvm 编辑:程序博客网 时间:2024/06/05 10:50

   摘自java核心技术卷一13.2.3

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

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

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




0 0