1.HashMap:根据键值hashCode值存储数据,大多数情况下可以直接定位到它的值,但是遍历顺序不确定。所有哈希值相同的值存储到同一个链表中
                        HashMap只允许一条记录的值为null,允许多条记录的值为null。
                        HashMap非线程安全,任意时刻可以有多个线程同时写HashMap
 
                为什么HashMap不是线程安全的?
                    1.比如两个线程同时使用put方法,刚好两个put方法的hashcode值一样,发生了碰撞,那么会发生值的覆盖。
                    2.当超过限定的threshold后,会进行rehash,所有的元素都要背重新计算一遍,这里会产生死循环,具体参考https://coolshell.cn/articles/9606.html
 
                 如何线程安全的使用HashMap?
                    1.Hashtable
                    2.ConcurrentHashMap
                    3.Synchronized Map
            
2.Hashtable:继承自Dictionary类,并且是线程安全的,任一时间只能有一个线程写HashTable,并发性不如ConcurrentHashMap,ConcurrentHashMap引入了分段锁
                            HashTable是线程安全的,但是效率低,HashTable使用synchronized,所以所有的线程竞争一把锁。
                            ConcurrentHashMap不仅线程安全而且效率高,因为它包含了一个Segment数组,将数据分段存储,给每一段数据配一把锁,也就是分段锁技术。
                      
3.LinkedHashMap:保存了记录的插入顺序
 
4.TreeMap:实现了SortedMap接口,能够把它保存的记录根据键排序,默认是按键值升序排序。      
 
 
HashMap的内部实现:
    1.存储结构:数组+链表+红黑树(JDK1.8之后引入的)
    2.HashMap使用哈希表存储,哈希表为了解决冲突,采用开放地址发和链地址法,Java中使用链地址法
    3.HashMap的默认构造字段
            threshold //所能容纳的key-value对极限  
            loadFactor //负载因子(默认值0.75)
            modCount //记录HashMap内部结构发生变化的次数
            size //实际存在的键值对数量
        threshold=length*loadFactor-----数组定义好长度后,负载因子越大,所能容纳的键值对个数越多
 
 
        是一种二叉查找树,每个节点增加一个存储为表示节点颜色(红色或黑色)
        对于二叉查找树,由n个节点随机构造的二叉查找树的高度为lgn,则二叉查找树的一般操作的执行时间为O(lgn)
            红黑树本质上是二叉查找树,又在二叉查找树的基础上增加了着色和相关的性质是的红黑树相对平衡,从而保证了红黑树查找、插入和删除的时间复杂度最坏为O(log n)
 
        红黑树的5个性质:
            1.每个节点或红或黑
            2.根节点是黑的
            3.每个叶节点是黑的
            4.如果一个节点是红的,那么它的两个子节点都是黑的
            5.对于任意结点,其到叶节点树微端NIL指针的每条路径都包含相同数目的黑节点
 
 
 
 
 
 
 
 
 
 
 

HashMap相关总结的更多相关文章

  1. 一张思维导图带你梳理HashMap相关知识

    HashMap可以说是java中最常见也是最重要的key-value存储结构类,很多程序员可能经常用,但是不一定清楚这个类背后的数据结构和相关操作原理,为了复习HashMap相关的知识,今天花了一天的 ...

  2. HashMap相关类:Hashtable、LinkHashMap、TreeMap

    前言 很高兴遇见你~ 在 深入剖析HashMap 文章中我从散列表的角度解析了HashMap,在 深入解析ConcurrentHashMap:感受并发编程智慧 解析了ConcurrentHashMap ...

  3. 问题(一)---线程池,锁、堆栈和Hashmap相关

    一.线程池: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中 ...

  4. JDK源码分析(5)之 HashMap 相关

    HashMap作为我们最常用的数据类型,当然有必要了解一下他内部是实现细节.相比于 JDK7 在JDK8 中引入了红黑树以及hash计算等方面的优化,使得 JDK8 中的HashMap效率要高于以往的 ...

  5. HashMap 相关面试题及其解答

    Q:HashMap 的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点.当链表长度超过 8 时,链表转换为红黑树. transient Node<K,V>[] ...

  6. HashMap相关(二)

    基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外, HashMap 类与 Hashtable 大致相同. ...

  7. LeetCode刷题笔记(2)HashMap相关应用

    1.问题描述 Example 1: Input: A = "this apple is sweet", B = "this apple is sour" Out ...

  8. JAVA中HashMap相关知识的总结(一)

    Java中HashMap在jdk1.7和jdk1.8中的区别点: 在jdk1.7中是用数组+链表形式存储,1.8采用数组+链表/红黑树形式 Jdk1.8中由链表转为红黑树是长度大于8,由红黑树转为链表 ...

  9. HashMap相关知识

    HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此 ...

随机推荐

  1. HTML标签之marquee

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zkn_CS_DN_2013/article/details/25229719 <html> ...

  2. day45

    今日内容 1.css三种引入方式 2.三种引入方式的优先级 3.长度及颜色单位 4.常用样式 5.css选择器 CSS三种引入方式 1.1css引入方式之行间式 ​ 行间式(特点): ​ 1.标签头部 ...

  3. SharePoint2016配置工作流开发环境

    1,下载Web PlatForm5.0  地址:https://www.microsoft.com/web/downloads/platform.aspx 2,保证开发环境能连网,安装Web Plat ...

  4. 使用MySQL命令行修改密码

    格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码ab12.首先在DOS下进入目录mysql\bin,然后键入以下命令    mysqladmin - ...

  5. SVD(奇异值分解)小结

    注:奇异值分解在数据降维中有较多的应用,这里把它的原理简单总结一下,并且举一个图片压缩的例子,最后做一个简单的分析,希望能够给大家带来帮助. 1.特征值分解(EVD) 实对称矩阵 在理角奇异值分解之前 ...

  6. C# 获取汉字拼音首字母/全拼

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...

  7. Kubernetes学习之路目录

    Kubernetes基础篇 环境说明 版本说明 系统环境 Centos 7.2 Kubernetes版本 v1.11.2 Docker版本 v18.09 Kubernetes学习之路(一)之概念和架构 ...

  8. HTML基础之HTML标签

    前端的三把利器 HTML:赤裸的一个人 CSS:华丽的衣服 JS/JavaScript:赋予这个人的行为,也就是动起来 HTML(超文本标记语言) html代码实际上就是一套能够被浏览器所识别的规则代 ...

  9. zabbix问题之snmp监控端口流量断图

    zabbix之snmp监控端口断图问题 在使用zabbix的snmp方式的监控端口流量时,某一个图总是断断续续的(被监控设备有较大的端口流量),经常会出现几分钟内没有图像的问题. 端口流量断图原因: ...

  10. [LOJ#6198]谢特[后缀数组+trie+并查集]

    题意 给你一个长度为 \(n\) 的字符串,问 \(LCP(i,j)+(w_i\ xor\ w_j)\) 的最大值,其中 \(LCP\) 表示两个后缀的最长公共前缀. \(n\le 10^5\) 分析 ...