什么是哈希表

哈希表
在哈希表中,我们可以利用哈希函数快速访问到数组中的目标数据。如果发生哈希冲突,就使用链表进行存储。这样一来,不管数据量为多少,我们都能够灵活应对。如果数组的空间太小,使用哈希表的时候就容易发生冲突,线性查找的使用频率也会更高;反过来,如果数组的空间太大,就会出现很多空箱子,造成内存的浪费。因此,给数组设定合适的空间非常重要。

哈希函数的6个特征:

①输出的哈希值数据长度不变
②如果输入的数据相同,那么输出的哈希值也必定相同
③即使输入的数据相似,但哪怕它们只有一比特的差别,那么输出的哈希值也会有很大的差异。输入相似的数据并不会导致输出的哈希值也相似
④即使输入的两个数据完全不同,输出的哈希值也有可能是相同的,虽然出现这种情况的概率比较低。这种情况叫作“哈希冲突”
⑤不可能从哈希值反向推算出原本的数据,即输入和输出不可逆
⑥求哈希值的计算相对容易。哈希函数的算法中具有代表性的是MD5、SHA-12和SHA-2等。其中SHA-2是现在应用较为广泛的一个,而MD5和SHA-1存在安全隐患,不推荐使用



注:图1为哈希表存储位置“冲突”时的情况,图2为“哈希冲突”,这两个不是一回事。

参考链接:
Java Set 文档
http://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Set.html
Java Map 文档
http://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Map.html
美国旧金山大学整理制作的算法可视化动画演示网站
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
数据结构动态可视化网站:
https://visualgo.net/zh

[Java] Hashmap分析相关推荐

  1. Java HashMap双花括号初始化数据的代码解析,及带来的问题分析

    引言 package com.azdebugit.test.collection;import java.util.HashMap; import java.util.Map; import java ...

  2. Java HashMap的死循环的启示

    在酷壳上看到博主陈皓写的最新文章疫苗:Java HashMap的死循环.博主看问题非常透彻,代码分析到位,而且图文并茂,很容易让人理解一个死循环是怎么产生的. 在博文中,耗子叔叔分析的最重要的一点就是 ...

  3. linux java性能监控工具_性能监控工具以及java堆分析OOM

    一.性能监控工具 1.系统性能监控 Linux -确定系统运行的整体状态,基本定位问题所在 -uptime: ------系统时间 ------运行时间(例子中为127天) ------连接数(每个终 ...

  4. java超出gc开销限制_超出了GC开销限制– Java堆分析

    java超出gc开销限制 这篇文章是我们原来的GC开销超出问题模式的延续. 正确的Java堆分析对于消除O​​utOfMemoryError:GC开销问题至关重要. 如果您不熟悉此Java HotSp ...

  5. 超出了GC开销限制– Java堆分析

    这篇文章是我们原来的GC超出限制的问题模式帖子的延续. 正确的Java堆分析对于消除O​​utOfMemoryError:GC开销问题至关重要. 如果您不熟悉此Java HotSpot 1.6错误,建 ...

  6. Java HashMap 深入学习!HashMap 怎么 hash?又如何 map?

    HashMap 是 Java 中 Map 的一个实现类,它是一个双列结构(数据+链表),这样的结构使得它的查询和插入效率都很高.HashMap 允许 null 键和值,它的键唯一,元素的存储无序,并且 ...

  7. LeetCode(13.罗马数字转整数) JAVA Hashmap

    LeetCode(13.罗马数字转整数) JAVA Hashmap 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D ...

  8. java HashMap的使用

    java HashMap的使用 import java.util.HashMap; import java.util.Iterator; public class WpsklHashMap { pub ...

  9. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

最新文章

  1. css位置布局,CSS定位布局相关
  2. 抗击疫情,AI一直在行动
  3. k8s v1.9.6 超详细搭建步骤
  4. python3下载文件-使用Python 3从网上下载文件
  5. 如何正确使用迁移学习
  6. Symfony2 学习笔记之模板使用
  7. ios开发之 icon规范+启动图规范+启动页规范
  8. Ubuntu搭建tftp服务器
  9. 我TM快疯了,在博客园开博短短2个月,经历博客园数次故障。。。
  10. 中移4G模块-ML302-OpenCpu开发-GPIO
  11. JPA Example查询
  12. 数控车宏程序c语言,a类宏程序什么意思?a类宏程序编程入门
  13. 【笔记本触摸板失灵】终极解决办法
  14. 恢复计算机文件的软件,删除文件恢复大师软件
  15. 苹果开发者账号双重验证忘记密保终极解决办法
  16. 雪球结构定价与风险深度分析
  17. 100以内的质数(素数)
  18. 中国交税最多的七大企业你知道都是谁吗?
  19. Victoria(硬盘检测工具)v4.46F绿色版
  20. <<人性的弱点>>读后感

热门文章

  1. SqlServerCe 数据库操作示例
  2. PhpStorm11.0 配置在浏览器中打开文件
  3. [网络安全自学篇] 二十九.文件上传和IIS6.0解析问题及防御原理(二)
  4. 【数据结构与算法】之深入解析“排列硬币”的求解思路与算法示例
  5. HarmonyOS之应用工程结构与设备模板
  6. Hive SQL子句中 group by 1 是什么意思?
  7. LeetCode Algorithm 剑指 Offer 57 - II. 和为s的连续正数序列
  8. PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)
  9. 征战蓝桥 —— 2014年第五届 —— C/C++A组第5题——锦标赛
  10. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1103:陶陶摘苹果