java中常用的5种map
前言
java为数据结构中的映射定义了一个接口java.util.Map,有五个实现类:HashMap、LinkedHashMap、HashTable、TreeMap、ConcurrentHashMap
1.HashMap
最常用的Map,根据键的hashcode值来存储数据(采用链地址法,也就是数组+链表+红黑树的方式),根据键可以快速获得它的值(因为相同的键hashcode值相同,在地址为hashcode值的地方存储的就是值,所以根据键可以很快获得值。即使键值不同而hashcode值相同,也能快速找到对应hashcode的链表,从而通过遍历快速找到值)。
HashMap最多只允许一条记录的键为null,HashMap不支持线程同步,即任意时刻可以有多个线程同时写。
2.HashTable(基本已被淘汰)
HashTable的操作几乎和HashMap一致,主要的区别在于HashTable为了实现多线程安全,在几乎所有的方法上都加了synchronized锁,而加锁的结果就是Hashtable操作的效率十分低下。
3.LinkedHashMap
LinkedHashMap是HashMap的一个子类,但它保持了记录的插入顺序(内部维护了一个双向链表),遍历时会通过链来遍历。
4.TreeMap
实现了SortMap接口,能够把保存的记录按照键排序(默认升序),也可以指定排序比较器,遍历时得到的数据是排过序的,底层用红黑树实现
5.ConcurrentHashMap
ConcurrentHashMap是一个并发散列映射表的实现,它允许完全并发的读取,并且支持给定数量的并发更新。相比于HashTable和同步包装器包装的HashMap,要快很多。因为这两者采用的是一个全局所来同步不同线程间的并发访问,使得访问变成串行的了