Java自带了各种Map类,可归为三种类型:
1.通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现
- HashMap
- Hashtable
- Properties
- LinkedHashMap
- IdentityHashMap
- TreeMap
- WeakHashMap
- ConcurrentHashMap
2.专用 Map,您通常不必亲自创建此类 Map,而是通过某些其他类对其进行访问
- java.util.jar.Attributes
- javax.print.attribute.standard.PrinterStateReasons
- java.security.Provider
- java.awt.RenderingHints
- javax.swing.UIDefaults
3.一个用于帮助实现您自己的 Map 类的抽象类
- AbstractMap
我们今天主要来认识java.util包中的HashMap、Hashtable、LinkedHashMap、TreeMap。
Hashmap:
- 最常用的Map
- 根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度
- 遍历时取得数据的顺序是完全随机的
- 最多只允许一条记录的键为Null,允许多条记录的值为 Null
- 不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致
- 使用用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap
Hashtable:
- 与 HashMap类似
- 它继承自Dictionary类
- 不允许记录的键或者值为空
- 支持线程的同步,即任一时刻只有一个线程能写Hashtable
- 线程同步导致Hashtable在写入时会比较慢
LinkedHashMap:
- HashMap的一个子类
- 保存了记录的插入顺序
- 先进先出,遍历时先得到的记录是先插入的,可以在构造时用带参数,按照应用次数排序
- 在遍历的时候会比HashMap慢。
- 例外情况,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关
TreeMap:
- 实现SortMap接口
- 默认是按键值的升序排序,也可以指定排序的比较器
- 当用Iterator 遍历TreeMap时,得到的记录是排过序的
总结:
- 用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择
- 按自然顺序或自定义顺序遍历键,那么TreeMap会更好
- 出的顺序和输入的相同,那么用LinkedHashMap 可以实现,可以按读取顺序来排列
参考:
来源:oschina
链接:https://my.oschina.net/u/1024408/blog/165449