今天重点学习一下HashTable/HashMap/ConcurrentHashMap之间区别,这个问题一直困扰着我,所以想看看这里面到底有什么神奇的东东在里面。
只是简单的对这三者之间的区别进行总结,目的很简单为了将知识点进行一次有结构的复习思路,来面对面试。
然后将看到的几篇有质量的文章进行推荐。
1、首先HashTable与HashMap之间的区别。
①从继承的父类上看:HashTable继承Dictionary,HashMap继承AbstractMap。
②内部使用迭代器的区别:HashTable使用Enumeration枚举,遍历的结果是先进后出,HashMap使用Iterator迭代器,遍历的结果是先进先出。
③线程安全性:HashTable线程安全采用synchronized关键字,HashMap线程不安全,因此执行效率高。
④内部扩容机制:HashTable扩容采用Old*2+1,且默认大小为11;HashMap扩容机制为2^n,默认大小为16。
⑤键值:HashTable的key与value都不可以为null,否则会抛出NullPointerException异常,HashMap的key可以为null,但是键值只能有一个null。
2、ConcurrentHashMap
对于ConcurrentHashMap,主要的是将Map划分为多个HashTable,采用锁分离技术。