Java-Hash 哈希表

  • 内容
  • 评论
  • 相关

在一般的数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定的值时,需要把查找值和一系列的元素进行比较.

此时的查询效率依赖于查找过程中所进行的比较次数.

如果元素的值(value)和在数组中的索引位置(index)有一个确定的对应关系(hash).

公式为:   index =   hash(value);

那么对于给定的值,只要调用上述的hash(value)方,就能找到数组中取值为value的元素的位置.

index =  元素值 /10 -1;

如果数组中元素的值和索引位置存在对应的关系,这样的数组就称之为哈希表,可以看出哈希表最大的优点是提供查找数据的效率.

一般情况下,我们是不会把哈希码(hashCode)作为元素在数组中的索引位置的,因为哈希码很大,数组长度有限,会造成索引越界问题.

这个时候,我们可以在哈希码和元素位置之间做某种映射关系.

元素值    ----hash(value)----> 哈希码-----某种映射关系------> 元素存储索引

注意:每个对象的哈希码是不同的,

----------------------------------------

哈希表的插入和查找是很优秀的.

可是当哈希表接近装满时,因为数组的扩容问题,性能较低(转移到更大的哈希表中).

加载因子:0.75.

----------------------------------------

数组是会记录添加顺序的,按照索引位置来存储的,允许元素重复.

哈希表中:元素是不能重复的,对象如果相同则hashCode相同-->index相同.

不会记录元素添加的先后顺序.

结构在做范围查询的时候,性能超群,一般的用来做索引的结构.

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注