HashMap 和 Hashtable 有什么区别?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
主要区别线程安全性、同步性、速度
线程安全性:HashTable是线程安全的,HashMap是线程不安全的
HashTable实现线程安全的方式是修改数据时 锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化。
HashTable底层数组+链表实现,无论key还是value都不能为null,初始size = 11,扩容:newsie
= oldsize*2+1
HashMap可以存储null建和null值,线程不安全,初始size为16,扩容newsize = oldSIze*2,size为2的n次幂
同步:Hashtable是线程安全的,它的方法是同步的,可以直接用在多线程环境中。而HashMap则不是线程安全的,在多线程环境中,需要手动实现同步机制。
HashMap可以通过下面的语句进行同步: Map m = Collections.synchronizeMap(hashMap);
速度:由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。