Hashmap与Hashtable简介

父类
复制代码

Hashtable继承自Dictionary接口,Hashmap继承自AbstractMap接口

使用
复制代码

Hashmap与Hashtable在使用方面基本相同,不过对于put()方法,有所差异,Hashmap允许key和value为null,Hashtable若key或value为null会抛出空指针异常。

实现:
复制代码

Hashtable是线程安全的,所有的方法都添加了synchronized关键字(对象锁),Hashmap是线程不安全的,若无并发问题建议使用Hashmap。 Hashtable与Hashmap的实现是采用数组加链表的数据结构,jdk1.8以后对Hashmap链表结构做了调整,当链表长度大于8后,结构调整为红黑树。红黑树相对于平衡二叉树的优势在于,红黑树允许局部的不平衡,写操作时树结构的变换次数相对少,省去了很多调平操作。

虽然Hashtable是线程安全的,但它的实现采用的是悲观锁,在高并发环境下存在死锁问题,建议使用concurrentHashmap。 concurrentHashmap采用分段锁实现,每段都是采用Hashmap实现的,初始容量是16。

扩容
复制代码

Hashmap初始容量为16,Hashtable的初始容量大小为11

HashMap扩容算法为 2n,Hashtable扩容算法为 2n + 1

Hashmap负载因子0.75,当容量达到0.75*n时,进行扩容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值