7、哈希表

哈希表,也叫做散列表,它通过哈希码直接找到指定数据。就和数组中通过索引获取元素一样,很快。

特点:

  1、添加快

  2、查找快

  3、唯一

  4、无序


1、hashCode方法

它返回一个整数,是数据的哈希码。

2、散列算法

它指通过数据的哈希码,计算出数据在哈希表中位置。

例子,除留取余法:

   一个哈希表长度为10,则位置有【0,1,2,3,4,5,6,7,8,9】,一个数据哈希码为1001,散列算法为 y = x % 10 。

     则:1001 %10 = 1,即1001应该存放在哈希表中1的位置。


 

3、哈希表中添加数据

步骤:

  1、使用hashCode方法获取数据的哈希码。

  2、使用散列算法处理哈希码,得到数据存储的位置。

  3、判断:

    (1)、无冲突:该位置为空,添加成功。

    (2)、发生冲突:位置已经有数据了,使用 equals 方法判断位置中是否有重复的元素。

        有相同数据:添加失败

        没有相同数据:添加成功

4、哈希表中查找数据

步骤:

  1、使用hashCode方法获取数据的哈希码。

  2、使用散列算法处理哈希码,得到数据存储的位置。

  3、判断:

    (1)、无数据:数据不在表中。

    (2)、存在数据:依次使用 equals 方法对比数据。


5、装填因子

它指的是要存放数据的个数和哈希表的长度之比。

当装填因子为0.5的时候,哈希表性能达到最优。


6、减少冲突

提高哈希表的效率。

方式:

  1、改善装填因子

  2、改善散列算法

  3、改善处理冲突的方法


Java中的HashSet、HashMap、HashTable(已过时)底层都使用哈希表实现。

 

posted @ 2022-12-08 17:35  在博客做笔记的路人甲  阅读(139)  评论(0编辑  收藏  举报