相同点: HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口
不同点:
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的, Hashtable的方法是Synchronize的,也就是说是同步的,
而HashMap是线程序不安全的,不是同步的,如果想要同步,则使用 ConcurrentHashMap
HashMap在只有一个线程访问的情况下,效率要高于Hashtable
如果是多线程
HashTable实现线程安全的代价就是效率变低,因为会锁住整个HashTable,
而ConcurrentHashMap做了相关优化,因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定,效率比HashTable高很多
三.Value值:只有HashMap可以让你将空值作为一个表的条目的key或value。Hashtable、ConcurrentHashMap都不支持KV为NULL
注意:HashMap的key/value均可以为null,但是TreeMap的key不能为空,value可以为空
其他Map:
(1) LinkedHashMap( LinkedHashMap则记录了插入顺序):LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,
先得到的记录肯定是先插入的,也可以在构造时带参数,按照访问次序排序。
(2) TreeMap( TreeMap默认升序):TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,
当用Iterator遍历TreeMap时,得到的记录是排过序的。如果使用排序的映射,建议使用TreeMap。
在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,
否则会在运行时抛出java.lang.ClassCastException类型的异常。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!