Java HashMap与Hashtable数据结构和特点+HashSet简述
1.HashMap
HashMap就是基于数组和链表的数据结构:JDK1.7使用 数组+单向链表;JDK1.8使用 数组+单向链表+红黑树
HashMap有两个重要的参数:
一个是负载因子 0.75:表示数组使用率达到75%,并且数组长度大于64,扩容数组
一个是初始值大小 16:表示数组的长度
特点:HashMap线程不安全,允许赋值为null, 初始数组长度16 扩容2倍
面试题:描述HashMap数据结构
- 构成:数组+单向链表+红黑树
- 数组存放的过程:根据key的hash值经过经过计算(取余)得出当前元素应该存放在数组中的位置,如果当前位置有值,利用单向链表向下延伸
- 延伸为单项链表,因为单向链表的查询效率会随着元素的增多而大幅度下降,所以在JDK1.8之后中加入了红黑树
- 当单向链表的长度超过8 ,并且集合中的元素个数大于64 ,单向链表转换为红黑树,如果数中的元素在后续减少到了6个,则继续转换为单向链表
2.Hashtable
特点:Hashtable线程安全,不允许赋值为null,数组初始为11 扩容2倍+1 JDK1.0就存在
其余与HashMap相同
3.HashSet
HashSet底层使用的是HashMap :因为HashSet中存储的元素与HashMap中存储的键(key)值 特点一致
特点:无序、无下标、不能重复、线程不安全、允许为null