欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HashMap源码详解与对比

程序员文章站 2022-04-08 19:14:36
前几天工作忙得焦头烂额时,同事问了一下关于Map的特性,刹那间懵了一下,紧接着就想起来了一些关于Map的一些知识,因为只要涉及到Collection集合类时,就会谈及Map类,因此理解好Map相关的知识是灰常重要的。 Collection集合类 与 Map类的层次结构,如下图: Map是用来存储 K ......

 

  前几天工作忙得焦头烂额时,同事问了一下关于map的特性,刹那间懵了一下,紧接着就想起来了一些关于map的一些知识,因为只要涉及到collection集合类时,就会谈及map类,因此理解好map相关的知识是灰常重要的。

 

  collection集合类 与 map类的层次结构,如下图:

  HashMap源码详解与对比

 

  map是用来存储 key-value(k-v)键值对,且不允许key重复。(jdk 1.8)

  map的子类包含hashtable,hashmap,linkedhashmap,treemap,enummap,j.u.c并发包下面包含concurrenthashmap,concurrentskiplistmap。

  注:hashtable是通过“synchronized”来实现同步,concurrenthashmap是通过“分段锁”来实现并发,concurrentskiplistmap是通过“跳表”来实现并发。

 

  数据结构对比

  jdk 1.8之前,hashmap的底层是数组和链表结合使用,可以说其结构是单向链表构成的数组,即链表散列,又称拉链法,即数组中的每一个序列空间代表一链表,若在插入新元素时,如果哈希冲突,则将新的元素插入到冲突的序列空间的链表头部

  HashMap源码详解与对比

 

 

 

    jdk 1.8之后,hashmap的底层是数组链表和二叉树结合使用,

 

 

  思绪有点乱,明天理清,继续完成,未完...