Hashtable,HashMap,HashSet异同

Hashtable

Hashtable散列表,通过键-值对应的形式存储元素,是一种无序的数据结构。
类的定义:

public class Hashtable
    extends Dictionary
    implements Map, Cloneable,io.Serializable

构造函数如下

Hashtable():构造一个空的散列表,初始容量为11.负载因子为0.75.
Hashtable(int initalCapacity,float loadFactor):指定初始化容量和负载因子,构造一个散列表。
Hashtable(Map t):根据映像所包含的元素,构建一个散列表。

散列表(Hashtable)的主要方法如下:

object put(object key,object value):put方法是向一个散列表中添加元素,在散列表中根据所添加的键值来定位元素,这个键值是唯一的,针对这个方法,要记住这个键值是对象型数据。
boolean containsKey(object key)和boolean containvalue(object value):这两个方法是测试散列表中是否包含指定的键值和值。
Object remove(object key):根据指定的键值从散列表中删除对应键的元素。
Colletion values():返回散列表中所包含元素的集合,是元素的集合,而不是key的集合。

在散列表中不允许有两个相同的元素,如有相同的元素,程序会将其作为一个元素来处理。
Hashtable的put方法:

方法是同步的
方法不允许value==null
方法调用了key的hashCode方法,如果key==null,会抛出空指针异常

HashMap

类的定义

public class HashMap
    extends AbstractMap
    implements Map, Cloneable, Serializable

可见Hashtable 继承自 Dictionary 而 HashMap继承自AbstractMap
HashMap的put方法:

方法是非同步的
方法允许key==null
方法并没有对value进行任何调用,所以允许为null

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,
主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

HashSet

HashSet(散列集)和散列表(hashtable)这两种数据结构,功能基本相同,不过他们实现的接口不一样。散列表实现的是Map(映像)接口,而散列集(HashSet)实现了Set接口。另外散列表是线性同步,而散列集是非线性同步的。

HashSet既然实现了Set接口,也就实现了Collection接口,所以它是一个集合,仍然是add方法添加元素。
散列集(HashSet)的构造函数如下

HashSet():创建一个空的散列集对象。
HashSet(collection c):创建一个包含有collection集合中所有元素的散列集对象。
HashSet(int initialCapacity):创建一个包含有collection集合中所有元素的散列集对象。
HashSet(int initialCapacity,float loadFactor):指定初始化容量和负载因子,构造一个散列表。它的初始化容量为16,负载因子为0.75.

散列集(HashSet)的常用方法如下:

boolean add(obj):添加一个元素到散列集中。如果这个元素中在散列集中不存在,就直接添加它,否则就返回false.
boolean remove(obj):删除一个元素,如果这个元素存在,就删了它,否则就返回false.
boolean isempty():判断集合是否为空。

散列集可以采用迭代器进行遍历,散列集合散列表一样,都不能拥有相同的元素。

散列集通过内部散列码计算元素存储地址,这一点与散列表一样,只不过散列集没有键值。

使用散列集进行数据处理,比使用链表进行数据处理花费的时间更短,这样可以节约系统资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值