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. 何为用户体验?附《用户体验的要素》PDF版下载

    一.什么是用户体验? 用户体验(User Experience,简称UE/UX)是用户在使用产品过程中建立起来的一种纯主观感受.但是对于一个界定明确的用户群体来讲,其用户体验的共性是能够经由良好设计实 ...

  2. O​r​a​c​l​e​ ​1​1​g​ ​客​户​端​安​装​及​p​l​s​q​l​配​置

    百度文库 http://wenku.baidu.com/link?url=7KyIHuoeUf1EvD5uClFNugDIT9s_dU7bu5_2XhQK4SLarHfG_dBwzhMooedQcsn ...

  3. VC基于单文档OpenGL框架

    本文是在VC6.0的环境下,运用MFC实现的OpenGL最基本框架,需要简单了解MFC编程(会在VC6.0里创建MFC单文档应用程序就行),甚至不必了解OpenGL的知识.以下是具体的步骤. 1.创建 ...

  4. Python2.7-os.path

    os.path 模块,实现了对文件路径的操作,但是不操作文件.由于不同系统文件路径格式不同,os.path 总是调用适合当前系统的版本,你也可以手动导入别的系统的(posixpath,ntpath,m ...

  5. 树莓派学习笔记(4):利用yeelink实现在线硬件状态监控

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 一.实验目的 本文实验目的是定时获取树莓派CPU的温度.占用率及内存占用率,并其结果上传到yeelink网站,实现在 ...

  6. tar 压缩 解压 打包命令

    01-.tar格式 解包:[*******]$ tar xvf FileName.tar 打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压 ...

  7. linux系统下php通过php_oci8扩展连接oracle数据库 Nginx

    相关版本信息: PHP Version 5.6.30 nginx version: nginx/1.10.3 Linux version 2.6.32-358.el6.x86_64 (mockbuil ...

  8. OC实现个人中心页面

    AppDelegate.m: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic ...

  9. 2017-2018-1 20155202 张旭 嵌入式C语言——时钟提取时分秒

    2017-2018-1 20155202 张旭 嵌入式C语言--时钟提取时分秒 任务要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案, ...

  10. 20155209林虹宇Exp4 恶意代码分析

    Exp4 恶意代码分析 系统运行监控 使用schtasks指令监控系统运行 新建一个txt文件,然后将txt文件另存为一个bat格式文件 在bat格式文件里输入以下信息 然后使用管理员权限打开cmd, ...