
hashmap
小涛_foxiaotao
我是一个普通人
展开
-
HashMap结构
HashMap结构及版本区别1、HashMap:继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。是散列分布存储的,通过key/value结构实现。其中key和value都可以是null,是无序的。2、HashMap的结构2.1、jdk1.7采用数组+ 单链表的数据结构hashMap 在1.7的结构hash表是一个数组,根据索引将条目存入hash表中,如果出现hash索引相同的时候,将会以链表的形式在同一个索引处储.原创 2020-12-15 17:43:29 · 2444 阅读 · 0 评论 -
hashmap死锁的产生
都说hashmap是线程不安全的,多线程时候容易造成死锁死锁的原因就在扩容的时候原hashmap结构图假如如下,A、B是hashmap其中两个Entry,在扩容之前具有相同的index,形成链表结构,如图1、线程一运行到Entry A, B = A.next,运行完这行后。线程一进入线程等待(此时链表关系A.next = B)2、线程二正常运行,顺利完成扩容,在偶尔情况下恰好扩容之后A、B,在newTable中还是拥有相同的index,但此时由于经过了一次扩容,由于扩容过程也是.原创 2020-12-15 17:39:38 · 1089 阅读 · 0 评论 -
hashMap1.7头插法及扩容
hashmap头插法是在jdk1.7之前版本中存在的。1、什么是头插法hashmap结构内部table表,当不同的元素hash相等的时候,在改位置table[i]形成链表,相同位置后来者插入到链表表头的位置 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null)原创 2020-12-15 15:16:05 · 2794 阅读 · 5 评论 -
为什么hashmap的容量必须是2的n次幂
要明白为什么是2的n次幂,这要从hashmap的hashCode方式说起,hashmap的容量期望就是用来均匀散列存放map中的元素。hashmap根据hash值把元素放到hashmap内部数组的一个位置上。1、为什么hashmap的容量必须是2的n次幂??我们不妨先看看hashCode的原理,以String为列,获取hashCode的方法源码 public int hashCode() { int h = hash; if (h == 0 &...原创 2020-11-18 18:31:06 · 3222 阅读 · 1 评论