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. luogu2402 奶牛隐藏

    题目描述 在一个农场里有n块田地.某天下午,有一群牛在田地里吃草,他们分散在农场的诸多田地上,农场由m条无向的路连接,每条路有不同的长度. 突然,天降大雨,奶牛们非常混乱,想要快点去躲雨.已知每个田地 ...

  2. 关系型数据库工作原理-数据库整体框架(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  3. SQL Server将自己的查询结果作为待查询数据子列之二

    嵌套子查询是SQL语句中比较常用的一种查询方法,开发过程中遇到查询需要将自己的某列作为待查询的数据,在参考别人的SQL语句的写法终于实现了自己需要的功能. 不太和谐查询语句如下: SELECT DIS ...

  4. 解析Visual C# 7.2中的private protected访问修饰符

    去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private pro ...

  5. WordPress制作一个首字母排序的标签页面

    很早就想制作这样一个页面了,废话不多说, 先看看效果:传送门 在网上找了很多的代码,试了很久,修改了一些代码,最终就达到了现在的效果. 实现方法:(里面增加了缓存功能,打开页面更快,对数据进行了缓存, ...

  6. WP-player——WordPress的一款好用的音乐插件

    作者的主页:http://webjyh.com/wp-player/ 安装:在WordPress后台搜索安装即可,或者去作者的主页下载安装. 使用方法:这个插件是通过短代码调用的,安装好插件之后便可以 ...

  7. 谁能用通俗的语言解释一下什么是 RPC 框架?

    转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题 关于RPC你的题目是RPC框架,首先了解什么叫RP ...

  8. 前端dom元素的操作优化建议

    参考自:http://blog.csdn.net/xuexiaodong009/article/details/51810252 其实在web开发中,单纯因为js导致性能问题的很少,主要都是因为DOM ...

  9. 手把手的SpringBoot教程,SpringBoot创建web项目(五)

    这一节,我们来演示如何在SpringBoot项目中连接数据库,并且自动创建一张表. 按照惯例,数据库我们依然使用mysql,至于什么是jpa呢? jpa是sun推出的持久化规范(java persis ...

  10. vue技术解析二之组件通信

    --------------------------动画效果----------------------------------- <transition name="router-f ...