• Java基础知识强化之集合框架笔记75:哈希表


    1. 哈希表数据结构(数组):

    2. 哈希表确定元素是否相同:

    (1)判断的是两个元素的哈希值是否相同

                        如果相同,再判断两个对象内容是否相同

    (2)判断哈希值相同,其实判断的是对象的hashCode的方法

            判断内容相同,其实使用的equals()方法

    注意:如果哈希值不同,是不需要判断equals()

    3. 哈希冲突:

    (1)哈希冲突的含义:

            哈希表,可以快速的查询一个对象在内存里的位置,进行引用。
            hashValue => object 一个哈希值对应一个类,如果出现两个相同的哈希值,那肯定不能确定到底是索引的位置。

    (2)哈希冲突的解决办法:

    >>>1. 分离链接法:就是对hash到同一地址的不同元素,用链表连起来,也叫拉链法.

    >>>2. 开放定址法:所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入

                               (地址有冲突,就在此地址附近找)。包括线性探测法,平方探测法,双散列等 

    >>>3. 在散列函数法:对于散列表(哈希表),我们事先准备好多个散列函数(哈希函数)。

               fi (key) = RHi(key)(i=1,2,3,……,k)

    这里RHi 就是不同的散列函数(哈希函数),你可以将除留余数、折叠、平方取中全部用上。

    每当发生散列地址冲突的时候,就换一个散列函数计算,相信总会有一个可以将冲突解决。这种方法能够使得关键字不产生聚集,当然,相应地也增加了计算时间。

    >>>4. 公共溢出区法:我们为所有冲突的关键字建立了一个公共的溢出区来存放

    在查找的时候,对给定值通过散列函数计算出散列地址之后,先与基本表的相应位置进行对比,如果相等,则查找成功;如果不相等,则到溢出表去进行顺序查找。如果相对于基本表而言,有冲突的数据很少的情况下,公共溢出区的结构对查找性能来说还是非常高的

  • 相关阅读:
    SpringBoot-基于Maven工程使用SpringBoot
    Nginx的Mainline version、Stable version、Legacy version的版本区别
    Keepalived+Nginx实现负载均衡高可用
    Angular5学习笔记
    Angular5学习笔记
    Angular5学习笔记
    Angular5学习笔记
    Angular5学习笔记
    Kettle能做什么?
    Angular5学习笔记
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5028715.html
Copyright © 2020-2023  润新知