比较:TreeMap、HashMap、LinkedHashMap、HashTable
HashMap
- 内部结构是一个数组,线性顺序存储,二次结构使用线性的单链表
- 据键可以直 接获取它的值,具有很快的访问速度
- 不支持线程的同步,即任 一 时刻可以有多个线程同时写HashMap;可能会导致数据的不一致
- 允许一个空键值
- Map interface的一个实 现
- 首先通过类本身的hashcode得到hash值 ,然后再通过hash()方法得到新的hash函数,防止碰撞
HashTable
- 采用hash法进行索引
- 不允许空键值
- 继承自Dictionary
- 方法是线程安全的
- 直接使用对象的hashCode
TreeMap
- 内部结构是一棵红黑树(又叫排序数,是二叉树的一种),使用链式存储,可以指定比较器Comparator,key需实现Comparable接口
- key值不能是null
- 实现SortMap接口,把保存的记录根据键排序
LinkedHashMap
- HashMap的子类
- 内部结构是一个数组,线性顺序存储,二次结构使用线性的单链表,但同时内部维护了一个双向循环链表,可以保持记录的插入顺序、或者访问顺序(将get方法访问的元素移至链表尾部)
- 实现LRU算法的缓存容器,当然要指定淘汰时的使用频率和容量上限 LRU是Least Recently Used 近期最少使用算法。
怎样使HashMap同步
HashMap可以通过Map m = Collections.synchronizedMap(hashMap)
来达到同步的效果