HashMap和HashTable的区别

区别

  • 继承不同

HashMap继承的是· AbstractMap·,而HashTable继承的是·Dictionary 类(已被废弃)

  • 存储的健值对

HashMap 的键有一个可为null,值可有任意多个null,由于键可为空值,使用containsKey()判断是否有键
HashTable 键值对不能为空

  • 扩容

HashMap默认大小16
HashTable 默认初始大小11

  • 哈希值

HashTable的hash值是直接使用对象中的hashCode方法,而HashMap则是重新计算对象的HashCode;并且用与代替求模;

  • 遍历

Hashtable、HashMap都使用了 Iterator

  • 线程安全
  1. Hashtable的方法都是synchrnized修饰的线程安全
  2. HashMap线程不安全,效率高
HashMap简介

HashMap是基于哈希表实现,存储以key-value方式,内部通过单链表形式解决哈希冲突,容量超过阈值,会自动增长

 1. HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。

  2.HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。

  3.HashMap存数据的过程是:

  HashMap内部维护了一个存储数据的Entry数组,HashMap采用链表解决冲突,每一个Entry本质上是一个单向链表。当准备添加一个key-value对时,首先通过hash(key)方法计算hash值,然后通过indexFor(hash,length)求该key-value对的存储位置,计算方法是先用hash&0x7FFFFFFF后,再对length取模,这就保证每一个key-value对都能存入HashMap中,当计算出的位置相同时,由于存入位置是一个链表,则把这个key-value对插入链表头。

  4.HashMap中key和value都允许为null。key为null的键值对永远都放在以table[0]为头结点的链表中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值