HashMap概述
继承关系:
Map
--- HashMap
HashMap 基于哈希表的Map接口的实现.采用Key-Value形式,并且运行为null.线程不安全;不保证顺序恒久不变
Map map = Collections.syschronizedMap(new hashMap());可以使得线程安全
.HashMap 的数据结构
我的理解: 基于一段可扩展的数组,通过各自元素key的hashCode通过离散的形式放入数组.同时,为了解决hash冲突,1.数组会扩展;2.冲突元素会分流;3.每个数组位置使用链表或者红黑树的形式存放多个元素.
如何避免或者解决hash冲突,提高效率,就是hashMap的精髓.
HashMap的图解
- 存在一个长度len的数组,可以存放元素;
- 同时元素之间可以通过链表或者红黑树关联;
- 通过hash(key)%len的方式决定存放数组的位置;
- hash冲突的时候使用链表或者红黑树共用个数组里面
- 数组通过一定策略可以拓展,每次增加一倍,然后进行元素对半分流
HashMap 的实现源码
HashMap 里面实现一个Enrty,其重要属性有key,value,next;
所以HashMap 的一个线性数组就是Entry[],同时单向链表