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. Flink 的广播变量

    Flink 支持广播变量,就是将数据广播到具体的 taskmanager 上,数据存储在内存中,这样可以减缓大量的 shuffle 操作: 比如在数据 join 阶段,不可避免的就是大量的 shuff ...

  2. Camstar MES 5.8 發現Ajax事件失效

    從Camstar4.5升級到5.8後,發現原來用戶在4.5下可以正常使用的不良信息收集功能,列出的不良只有第一頁可以顯示,無法自動裝載下一頁. 嘗試發出,IE以下這個選項沒有選中,選中後,就可以正常工 ...

  3. Postman-自动化传参

    一,自动化传参 在实现接口自动测试的时候,会经常遇到接口参数依赖的问题,例如调取登录接口的时候,需要先获取登录的key值,而每次请求返回的key值又是不一样的,那么这种情况下,要实现接口的自动化,就要 ...

  4. Lr原理初识-hc课堂笔记

    showslow web服务器-apache.ngix devops 需求调研-占1/3的时间. 架构拓扑图 APP端测试工具:JT.Vtest 进程是管理单元.线程是执行单元. 虚拟用户和真实用户是 ...

  5. oninput和onpropertychange实时监听输入框值的变化

    oninput和onpropertychange实时监听输入框值的变化 传统监听输入框的做法就是使用keyup.keydown.keypress,或者change事件来实现,但keyup.keydow ...

  6. Python2.7-fnmacth

    fnmatch 模块,提供了对 Unix shell 的规则的支持,类似正则,但不一样,匹配的规则只有3条:*, ?, 在 [] 里的任意字符 模块方法: fnmatch.fnmatch(filena ...

  7. 求 1+2+3+ …… +n

    题目来源: 自我感觉难度/真实难度: 题意: 分析: 自己的代码: def Sum_Solution(n): # write code here if n==1: return 1 else: ans ...

  8. WebView之javascript与android交互基础加强

    一.什么是js与android交互? 通俗一点就是使用js代码调用java代码,或者使用java代码调用js代码. 二.为什么要使用js与java代码交互? 1.可以做一些js网页做本身处理不了的事情 ...

  9. vxlan 简单理解 vs calico 网络模型

    1.vxlan(virtual Extensible LAN)虚拟可扩展局域网,是一种overlay的网络技术,使用MAC in UDP的方法进 行封装,共50字节的封装报文头. 2.VTEP为虚拟机 ...

  10. WPF LinkButton

    <Button Margin="5" Content="Test" Cursor="Hand"> <Button.Temp ...