HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList相关
1、HashMap
允许Null键Null值,因其数据结构,存储效率高,无顺序。
基于hash算法实现,首先对key的hashCode计算,根据hash值获取在数组中的位置
负载因子默认是0.75,超过负载因子定义的容量后,会创建两倍数据大小,这个过程叫resize或者rehash
多线程会产生条件竞争
HashMap和HashSet区别:
HashMap实现了Map接口
HashSet实现了Set接口
HashMap储存键值对
HashSet仅仅存储对象
HashMap使用put()方法将元素放入map中
HashSet使用add()方法将元素放入set中
HashMap中使用键对象来计算hashcode值
HashSet使用成员对象来计算hashcode值
速度:HashMap > HashSet
2、HashMap和Hashtable的区别
HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。
Hashtable是线程安全的
3、LinkedHashMap
LinkedHashMap是否允许空 | Key和Value都允许空 |
LinkedHashMap是否允许重复数据 | Key重复会覆盖、Value允许重复 |
LinkedHashMap是否有序 | 有序 |
LinkedHashMap是否线程安全 | 非线程安全 |
4、ConcurrentHashMap
线程安全的HashMap
5、ArrayList和LinkedList
ArrayList的add效率高,但超过容量时扩容需要大量复制操作
LinkedList不存在容量问题,但每次增加都需要新建一个Entry对象,并赋值