HashMap和HashTable的区别是Java面试时经常被问的问题,面试宝典、网上谈过的资料遍地都是,看过二者实现代码的应该很容易理解。
不过提到这两个,就可能会涉及到ConcurrentHashMap这个类。今天就被问道,由于准备不足,只回答出是在HashMap的基础上增加了同步,且性能好于HashTable,但更多的就回答不出来了。愿意无疑是基础不够扎实,源码看得不够。今天在这里整理出来,作为一个教训吧。
概述:
HashMap和ConcurrentHashMap的定义【继承结构】如下:
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
implements ConcurrentMap<K, V>, Serializable
与HashMap一样,ConcurrentHashMap也是继承自AbstractMap,但实现的接口不同。HashMap实现了Map<K,V>,Cloneable,和Serializable;而ConcurrentHashMap则实现的是ConcurrentMap<K,V>和Serializable。也就是说区别主要在于Map接口和ConcurrentMap接口这里。继续向下,对比Map与ConcurrentMap两个接口:ConcurrentMap继承自Map,并增加了一些抽象方法:V putIfAbsent(K key, V value); boolean remove(Object key, Object value);boolean replace(K key, V oldValue, V newValue);V replace(K key, V value);
下面,转移到整体,开始集中于ConcurrentHashMap的类实现.前面的属性定义与HashMap一致,初始大小16,装载因子0.75[装载因子的介绍较多,这里不再详细描述],