【图灵干货】HashMap、HashSet、HashTable的区别是什么?
2021-12-12 11:58:33
java基础HashMap,HashSet,HashTable之间的差异在哪里?HashMap,HashSet,HashTable之间的差异:继承的父类和线程安全是不同的,要提供contains方法,**key和value是否允许null值,散列值的计算方法不一样,数组初始化和扩展的内部实现使用了不同的方法。
第一个:继承的父类是不同的。
Hashtable从Dictionary类继承,HashMap从AbstractMap类继承。但是两者都实现了Map接口。
第二个差别:线程安全。
Hashtable中的方法是Synchronize,而HashMap中的方法默认为非同步。
差异三:是否提供contains方法。
HashMap将Hashtable的contains方法移除,改为containsValue和containsKey,因为contains方法很容易造成误解。
Hashtable会保留contains、containsValue和containsKey三种方法,contains和containsValue功能相同。
不同之处:**key和value是否允许空值(面试者希望询问)
这里,key和value都是对象,它不能包含重复的key,但是可以包含重复的值。
在Hashtable中,key和value都不允许有空值。
在HashMap中,null可以用作键,因此键只有一个;可以有一个或多个键对应的值为null。如果get()方法返回null值,那么在HashMap中可能没有该键,或者相应的键的值为null。所以,在HashMap中,get()方法无法判断HashMap中是否存在一个键,而应该通过containsKey()方法进行判断。
差异五:散列值的计算方式不同。
Hashtable直接使用对象的hashCode,而HashMap也有一些基于对象的hashCode。
差异六:内部实现所用的数组初始化和扩展方法不同。
初始化内存大小不同,HashTable初始大小为11,HashMap初始大小为16。