哈希表的简单介绍

  • 哈希表是一种集合结构 包含map和set
  • 如果只有key,没有伴随数据value,可以使用HashSet结构(C++  stl set)
  • 如果拥有key,拥有伴随数据value,可以使用HashMap结构(C++ stl map)
  • 有无伴随数据是Hashmap和Hashset的唯一区别,底层的实际结构都是一回事,都是使用的红黑树

哈希冲突的解决办法

1,开放寻址法:如果指定位置上存在元素,那么就在存储在指定位置的下一个元素,如果仍然被占用,继续移动。以此类推,直到找到一个合适的位置。寻址的方式有很多,这仅仅是一个简单的例子。Java里面的ThreadLocal就是开放寻址法

2,链表法:Java里面的HashMap,每一个元素不仅是是一个Entry对象,还是一个链表的头部节点。每一个Entry对象通过指针指向他的下一个Entry节点。当新来的Entry映射到与之冲突的数组位置时,只需要插入对应的链表中即可

散列表扩容

1,多次元素的插入,单列表达到一定的饱和度时候,key映射位置时发生的冲突的概率会逐渐提高;这样大量的元素会拥挤在相同的数组的下标的位置,会形成很长的链表,对后续的插入和查询操作的性能有很大的影响

对于JDK中的HashMap而言,影响扩容的因素有两个:1,capacity:即当前的长度;2,loadfactor:负载因子,默认数值为0.75f

衡量HashMap需要扩容的条件是:HashMap.size >= Capacity * LoadFactor

扩容操作 具体干了什么事清呢?

1,扩容,创建一个新的Entry空的数组,长度是先前的2倍

2,重新Hash,遍历先前的Entry数组,将所有的元素重新进行Hash到新的数组中,这是因为长度扩大之后,Hash的规则也会随之改变,将先前的Entry重新得到了尽可能均匀的分配

* 当多个Entry被Hash到同一个数组下标的位置时,为了提升插入和查找的效率,HashMap会把Entry链表转化为红黑树的结构

哈希表和有序表的简单介绍相关推荐

  1. 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表

    单向链表 双向链表 单链表.双链表最简单的面试题 1.单链表和双链表如何反转 package class02;import java.util.ArrayList;public class Code0 ...

  2. 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题

    layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...

  3. 数据结构之顺序表和有序表查找其实现

    顺序表和有序表查找 顺序查找定义:从线性表中的第一个(或最后一个)数据元素开始,逐个进行数据元素关键字和给定值的比较,若某个数据元素的关键字和给定值相等则查找成功:如果直到最后一个(或第一个)数据元素 ...

  4. 数据结构与算法——6. 抽象数据类型:无序表与有序表及其链表实现

    文章目录 一.无序表(unordered list)抽象数据类型 1. 无序表的定义 2. 采用链表实现无序表 (1)链表 (2)链表节点 (3)python实现链表节点 (4)python实现链表 ...

  5. 左程云算法笔记(四)哈希表和有序表的使用、链表

    左程云算法笔记(四) 哈希表的使用 有序表的使用 链表 单链表反转 (LC206) 双向链表反转 打印两个有序链表的公共部分 合并两个有序链表(LC21) 判断一个链表是否为回文结构 (LC234) ...

  6. 数据结构-动态查找树表与平衡二叉树 红黑树简单介绍

    参考资料 数据结构(严蔚敏) 大话数据结构 百度百科 https://blog.csdn.net/lpp0900320123/article/details/39524947 https://mp.w ...

  7. [SDUT](3329)顺序表应用5:有序顺序表归并 ---有序表归并(线性表)

    顺序表应用5:有序顺序表归并 Time Limit: 100MS Memory Limit: 880KB Submit Statistic Discuss Problem Description 已知 ...

  8. formidable处理提交的表单或文件的简单介绍

    一般来说,客户端向服务端提交数据有GET和POST这两种方式,在之前的文章node.js当中的http模块与url模块的简单介绍当中我们可以知道通过req.url与url模块的配合处理可以快速得到客户 ...

  9. 哈希算法(Hash函数)简单介绍

    1.什么是哈希算法?(Hash函数) 哈希算法的定义和原理: 将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则,就是哈希算法.而通过原始数据映射之后得到的二进制值串就是哈希值. 设计一 ...

最新文章

  1. Matlab中用GUI做计算器,怎样用MATLAB中的GUI做一个简单计算器
  2. cron计划任务使用
  3. requests模块--python发送http请求
  4. FIREBIRD浅历
  5. 12、MySQL触发器到底是什么?
  6. php实现复选框删除功能,php怎么实现复选框批量删除
  7. php mysql获取新添加记录的id值_PHP获取MySql新增记录ID值的方法
  8. 09-CoreData iOS10.0变化
  9. 李宏毅老师机器学习和深度学习
  10. 算法复杂度为O(N) 的排序算法
  11. 2-7 SpringBoot常用注解讲解
  12. 乘法口诀表编程php视频,PHP学习之制作乘法口诀表
  13. 张一鸣活捉上班摸鱼员工遭怒怼:不爽退群啊!
  14. 200 多个 npm 包被攻击,Azure 开发者请注意
  15. Win11连不上网怎么办 win11连不上网的设置方法
  16. 80字符带空格 段错误_简单错误记录
  17. 8086CPU寻址方式详解
  18. MobSF分析.ipa文件,MobSF分析iOS app
  19. 计算机网络网络层之路由算法2链路状态路由算法
  20. RFID资产管理解决方案

热门文章

  1. 650c公路车推荐_盘点2020年各价位高性价比入门公路车
  2. python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...
  3. python3.8怎么打开创建_Python 3.8 新功能大揭秘【新手必学】
  4. java string逆序_java经典入门算法题,java初学者必备
  5. 【转】C#开发PACS医学影像处理系统(三):界面布局之工具栏
  6. 【转】DIB位图(Bitmap)的读取和保存
  7. 深入详解JVM内存模型与JVM参数详细配置
  8. java 通过id获取html代码_Maven私服安装配置,java通过私服下载代码,并打包后上传到私服(Nexus)...
  9. ffmpeg录屏鼠标闪烁问题解决方法
  10. 【HRBUST - 1623】Relation(思维模拟,拆解字符串)