HashMap底层实现
位桶加链表(红黑树)的结构实现,当链表长度达到8时转化为红黑树,红黑树的空间是链表的两倍。
HashMap允许key,value为空,非同步的(非线程安全,需要手动外部实现同步,面对并发修改快速失败),不担保有序。
Map<String,Integer>maps=Collections.synchronizedMap(new HashMap<>());
防止非同步进入HashMap。
影响HashMap实例性能的两个参数
- initial capacity初始容量,(即表示有多少个位桶,默认16)
- load factor 负载因子,(能被装多满,默认0.75,平衡时间空间,增大负载因子,可以减少实例占据空间,但是会增加搜索时间,影响大部分操作,例如put,get操作等)
HashMap内部有一个的Threshold变量和size变量
- Threshold=capacity*factor,size记录当前HashMap实例中的key值数量,当size值超过Threshold时,需要进行resize,容量变为原来的两倍,元素位置可能改变,链表以及红黑树结构也可能会改变。
因此,合适的初始化容量,可以避免reszie,提高效率。