目录
1、HashMap
基于哈希表的map接口的实现,允许出现null值和null键
数据结构:数组+链表+红黑树
非线性安全:底层代码在操作数组时未加锁,在多线程环境下会导致数据覆盖之类,产生线程安全问题,所以在多线程环境下使用HashMap会抛异常
扩容:元素加入数组时,会自动判断数组长度是否超过给定区域,默认为0.75,如果超出,则进行扩容,扩容为原数组的2的幂次方,若原数组在内存中没有连续可用空间,则申请新的可用的连续空间,将旧的数组复制到新的地址,再将旧数组置空,等待回收
2、ConcurrentHashMap
支持高并发更新与查询的哈希表,在保证安全时,进行检索不需要锁定
数据结构:Segments数组+HashEntry数组+链表+红黑树
线程安全:底层代码在操作数组时加锁,保证线程安全,高并发情况下,线程安全,操作成员变量或局部变量都不需要单独加锁处理
扩容:与HashMap一致