Hashmap

使用java语言进行系统开发时,使用得比较多得数据结构hashmap,它以[key,value],进行数据存储,通过key可以快速找到到对应的value值,但是key,value不能是java的基本类型 (int , float,double,long,short,byte) 必须是复合类型(String,Double...).并不是线程安全。

      存储数据格式:默认16个桶,每个桶对应一个hash值,以数组形式对16个桶依次存储;对所有的key进行hash后,然后 hash&(桶的数量-1)得到对应的桶数组位置,然后把该[key,value]存储到该桶里面;查询时间:通过key查询时,首先通过key,hash后,找到对应的桶O(1),如果该桶下面只有一条数据,或者没有,查询时间最快O(1),否则遍历桶下面链表数据,直到找到对应的key,或者遍历完该桶下面所有的链。删除,添加只需要移动链表的指针,不需要移动内存数据,
 
      当当前的数量超过阀值,需要重新申请一块内存(桶数组),是当前的内存(桶数组)的2倍,对已有的数据 也需要通过hash &(桶的数量-1)找到新桶的位置并存储。
 
Hashtable
    在hashmap的基础上,加了多线程并发控制,在hashmap的方法上加了synchronized关键字。
 
Hashset
   对hashmap进行了一层封装,由于该结构对外表现只存储key,默认value=new Object() ,对于hashmap 的key只会存在一份。
 
Linkhashmap
   由于hashmap中数据是存放在不同的桶里面的,对hashmap进行数据遍历时,就不一定是添加数据的顺序,linkhashmap在此基础中,对每条存储数据增加两个指针,after指向下一条数据,befort指向,每次新加一条数据,就改变指针的指向,对map进行遍历时,就遍历该双向链表,就可以保证顺序。
 
currenthashmap
   线程安全的hashmap,对hashmap进行了重写,hashmap使用数组链表来存储数据,currenthashmap在又在数组链表外又封装了一层,一个currenthashmap有多个分片,每个分片对应一个数组链表,对同一个分片的操作有多线程的并发控制,实际上就是,对每个分片的访问加了锁(可重入锁),和hashtable的并发控制相比,该结构对于多个线程访问不同的片段,不会互相等待,从而,降低了锁的粒度,提高了效率。
 
treemap
    以树的形式来存储数据,每个节点包含指向父节点指针,指向左节点的指针,指向右节点的指针,左节点小与右节点。以该形式存储,插入和删除,都可以快速找到对应的位置,效率比较高。
 
 
 
 
 

java JDK源码解析的更多相关文章

  1. 【转】Java HashMap 源码解析(好文章)

    ­ .fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wra ...

  2. 设计模式-简单工厂Coding+jdk源码解析

    感谢慕课geely老师的设计模式课程,本套设计模式的所有内容均以课程为参考. 前面的软件设计七大原则,目前只有理论这块,因为最近参与项目重构,暂时没有时间把Coding的代码按照设计思路一点点写出来. ...

  3. Java——LinkedHashMap源码解析

    以下针对JDK 1.8版本中的LinkedHashMap进行分析. 对于HashMap的源码解析,可阅读Java--HashMap源码解析 概述   哈希表和链表基于Map接口的实现,其具有可预测的迭 ...

  4. Java集合类源码解析:Vector

    [学习笔记]转载 Java集合类源码解析:Vector   引言 之前的文章我们学习了一个集合类 ArrayList,今天讲它的一个兄弟 Vector.为什么说是它兄弟呢?因为从容器的构造来说,Vec ...

  5. Java集合类源码解析:ArrayList

    目录 前言 源码解析 基本成员变量 添加元素 查询元素 修改元素 删除元素 为什么用 "transient" 修饰数组变量 总结 前言 今天学习一个Java集合类使用最多的类 Ar ...

  6. Java集合类源码解析:AbstractMap

    目录 引言 源码解析 抽象函数entrySet() 两个集合视图 操作方法 两个子类 参考: 引言 今天学习一个Java集合的一个抽象类 AbstractMap ,AbstractMap 是Map接口 ...

  7. Java集合类源码解析:LinkedHashMap

    前言 今天继续学习关于Map家族的另一个类 LinkedHashMap .先说明一下,LinkedHashMap 是继承于 HashMap 的,所以本文只针对 LinkedHashMap 的特性学习, ...

  8. Java集合类源码解析:HashMap (基于JDK1.8)

    目录 前言 HashMap的数据结构 深入源码 两个参数 成员变量 四个构造方法 插入数据的方法:put() 哈希函数:hash() 动态扩容:resize() 节点树化.红黑树的拆分 节点树化 红黑 ...

  9. Java - TreeMap源码解析 + 红黑树

    Java提高篇(二七)-----TreeMap TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap ...

随机推荐

  1. 从 HelloWorld 看 Java 字节码文件结构

    很多时候,我们都是从代码层面去学习如何编程,却很少去看看一个个 Java 代码背后到底是什么.今天就让我们从一个最简单的 Hello World 开始看一看 Java 的类文件结构. 在开始之前,我们 ...

  2. .net framework 4.5 +steeltoe+ springcloud 实现服务注册功能

    首先得先了解并熟悉一下springcloud,并手动去搭建一个服务中心,具体可度娘教程. 如果是.net core的话,实现注册也是没有问题的,网上教程很多,可自行度娘. 最难的就是基于Framewo ...

  3. 2D变形transform的translate和rotate

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Matcher类的简单使用

    今天工作时遇到一个问题, 用正则处理html标签时不知该如何下手.还好有Matcher帮助解决了问题. 需求如下: 例如有如下html文章内容: <p><a href="w ...

  5. C#枚举数值与名称的转换实例分享

    首先建立一个枚举: 复制代码代码如下: /// <summary>    /// 颜色    /// </summary>    public enum ColorType   ...

  6. 如何提高windows的性能

    默认windows启用了很多的效果,我们可能平时没有注意到,比如什么淡入淡出效果之类的,其实在我看来,这些效果不仅难看,而且影响了windows的性能,下面我就来说说怎么通过关闭这些效果来提高wind ...

  7. java容器类4:Queue深入解读

    Collection的其它两大分支:List和Set在前面已近分析过,这篇来分析一下Queue的底层实现. 前三篇关于Java容器类的文章: java容器类1:Collection,List,Arra ...

  8. 神奇的RAC宏

    先说说RAC中必须要知道的宏 RAC(TARGET, [KEYPATH, [NIL_VALUE]])   使用: RAC(self.outputLabel, text) = self.inputTex ...

  9. 设计模式 --> (3)策略模式

    策略模式 策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异. ...

  10. OC和JS交互的三种方法

    看简书上说一共有六种OC和JS交互的方法,但是前三种原理都一致,都是通过检测.拦截Url地址实现互相调用的.剩下的react native等第三方框架原理不一样,也没有去研究,下边记录我使用的三种方法 ...