昨晚电面过程中被问到HashTable与HashMap的区别以及分别适用于那些场合。当时回答对HashMap有一些了解,知道它继承了Map接口,Map存储有关联关系的键(key)/值(value)对,可以通过key来查找value,也可以通过value来查找key。关于HashTable,只记得在做连连看游戏的时候,用到过Table组件,对HashTable没有怎么用过。晚上回去查了HashTable与HashMap的区别,发现自己只是提到了一点点皮毛...
?
首先介绍一下HashTable与HashMap。
? HashTable类实现一个哈希表,该哈希表将键映射到相应的值。任何非?null?对象都可以用作键或值。
? HashMap是基于哈希表的Map?接口的实现。此实现提供所有可选的映射操作,并允许使用?null?值和?null?键。HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变。。
?
现对HashMap和HashTable的区别总结如下:
1.HashTable与HashMap继承的接口不同。
?? HashTable继承的是Dictionary接口,而HashMap继承的是Map接口。
?
2.写程序的时候,HashMap中存储的key值和value值可以为null,而HashTable中存储的key值和value值都不可以是null。
?? 在HashMap中,值为null的key只能有一个;而值为null的value可以有多个,每一个value对应于不同的key。
? ?在使用HashMap的get(Object?key)方法时要注意,当返回值为null时,代表着两种含义,一种是HashMap中没有相应的key键,另一种是该键对应的值是null。所以我们要判断HashMap中是否存在某个键的时候,不能使用get(Object?key)方法来进行判断,而应该用containsKey(Object?key)方法来判断。
?
3.HashTable中有contains(Object?value),containsKey(Object?key),containsValue(Object?value)方法;而在HashMap中去除了contains(Object?value)方法,只有containsKey(Object?key),containsValue
(Object?value)方法方法,因为contains(Object?value)方法容易让人产生误解。
?
class="p0">4.HashMap与HashTable最大的不同是:
???HashMap的方法不是synchronized(同步)的,而HashTable的方法是synchronized的。
? ?即多个线程访问HashTable时,不需要再为它的方法提供专门的操作来实现同步,它自身就拥有同步机制;而HashMap则需要为它的方法实现外同步。HashMap的同步问题可通过Collections的一个静态方法得到解决,使用?Collections.synchronizedMap(Map?m)?方法来“包装”该映射。