HashMap 与HashTable

HashMap 与HashTable

HashMap

  • HashMap是线程不安全的,可以存储null键和null值。在JDK1.7是由数组+链表实现的,到JDK1.8引入了红黑树(当链表长度超过8时,将链表结构转换成红黑树结构,利用红黑树的快速增删改查提高性能)
  • HashMap的数组初始默认长度(tablelength)为16,加载因子(loadfactor)为0.75。当Map中的元素数量超过当前tablelength*loadfactor时,HashMap的table会自动扩容,新的数组长度是原来的两倍。table的长度一直保持2的次幂,配合hashcode计算方法和最后的index=h&(length-1)方法可以使元素的散列程度更好。
  • HashMap每次扩容后原先的元素都会重新计算索引位置,重新插入。扩容的操作浪费时间和资源,因此在使用HashMap时应该预先给定一个适合的table容量。
  • 加载因子太大,会造成查找效率降低;加载因子太小,会造成空间浪费。
  • ConcurrentHashMap改善了HahMap的线程安全性。

HashTable

  • HashTable是线程安全的,不可以存储null值和null键。底层也是数组+链表的形式实现。由于线程的安全性,它的效率会降低。
  • 初始容量是11,扩容时,newsize=oldsize*2+1;

两者的区别

  1. Hashtable继承自Dictionary类&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值