当前位置: 首页 > 图灵资讯 > 技术篇> 【图灵干货】HashMap、HashSet、HashTable的区别是什么?

【图灵干货】HashMap、HashSet、HashTable的区别是什么?

来源:图灵教育
时间:2021-12-12 11:58:33

  java基础HashMap,HashSet,HashTable之间的差异在哪里?HashMap,HashSet,HashTable之间的差异:继承的父类和线程安全是不同的,要提供contains方法,**key和value是否允许null值,散列值的计算方法不一样,数组初始化和扩展的内部实现使用了不同的方法。

HashMap、HashSet、HashTable的区别

  第一个:继承的父类是不同的。

  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。