相同点: 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类型的异常。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。