java为数据结构中的映射定义了一个接口java.util.Map,四个实现类分别是:HashMap Hashtable LinkedHashMap TreeMap 。
Map的实现类,键不允许重复,键重复时值就会被覆盖;值允许重复。
HashMap:
1.最多允许一条键为NULL,允许多条值为NULL。
2.插入、遍历无序;。
4.遍历速度与容量有关,而不是实际数据条数。
5不支持线程同步(线程不安全),多个线程写hashMap,可能导致数据不一致。
6.可使用Collections的synchronizedMap方法或ConcurrentHashMap使其具有同步能力。
LinkedHashMap :
1.是HashMap的子类,不支持线程同步(线程不安全)。
2.保存了插入记录,Iterator遍历时,先插入的先遍历到(先插入的先读取到)。
3.访问顺序,如果put和get已存在的Entry,都会把Entry移动到双向链表的表尾(其实是先删除再插入)。
4.遍历速度只与实际数据条数有关。
5,.基于以上几点,一般情况下,遍历时Hashtable比HashMap慢。例外:相同数据量下,当HashMap数据少但是容量大,此时HashMap可能比Hashtable慢。
Hashtable:
1.继承了Dictionary类。
2.不允许键或值为NULL.
3.支持线程同步(线程安全),同一时刻只允许一个线程写,因此写入慢。
TreeMap:
1.实现SortMap接口
2.默认按键的升序排序,也可以自定义排序,重新一个Comparator。Iterator遍历时得到的记录是排序过的。
总结:
如果无序,而且无线程安全问题,HashMap最快。
如果有序,而且无线程安全问题,可选LinkedHashMap 。
Hashtable线程安全,插入速度慢。
TreeMap有默认的升序排序。