HashMap和HashTable的区别

相同点:

  1. HashMap和HashTable都是java.util包下的类
  2. HashMap和HashTable都实现了Map接口,存储方式都是key-value形式
  3. HashMap和HashTable同时也都实现了Serializable和Cloneable接口
  4. HashMap和Hashtable的负载因子都是0.75
    解释:负载因子(loadFactor),当我们第一次创建 HashMap 的时候,就会指定其容量(如果未明确指定,默认是 16),随着我们不断的向 HashMap 中 put 元素的时候,就有可能会超过其容量,那么就需要有一个扩容机制。所谓扩容,就是扩大 HashMap 的容量,在向 HashMap 中添加元素过程中,如果 元素个数(size)超过临界值(threshold) 的时候,就会进行自动扩容(resize),并且,在扩容之后,还需要对 HashMap 中原有元素进行 rehash,即将原来桶中的元素重新分配到新的桶中。
    在 HashMap 中,临界值(threshold) = 负载因子(loadFactor) * 容量(capacity)。
    loadFactor 是装载因子(负载因子),表示 HashMap 满的程度,默认值为 0.75f,也就是说默认情况下,当 HashMap 中元素个数达到了容量的 3/4 的时候就会进行自动扩容。
  5. HashMap与HashTable的部分方法相同,如put,remove等方法

不同点:

  1. HashMap是非线程安全的,HashTable是线程安全的
    HashMap:当进入put方法查看源码时可以发现put方法返回的方法只有个finla修饰,没有任何关于线程的存在。
    HashTable:当我们点击进入之后,就能马上看到一个synchronized关键字,表示这个方法在调用的时候不能被其他的线程对象访问。
  2. HashMap允许null作为键或值,HashTable不允许,运行时会报NullPointerException
  3. HashMap添加元素使用的是自定义hash算法,HashTable使用的是key的hashCode
  4. HsahMap在数组+链表的结构基础上,在jdk1.8以后又引入了红黑树,而HashTable没有
  5. HashMap初始容量为16,HashTable初始容量为11
  6. HsahMap扩容是当前容量翻倍(左移1位),HashTable是当前容量翻倍+1
  7. HsahMap与HashTable的部分方法不同
    HsahMap有containsKey方法和containsValue方法,但是没有contains方法。而HashTable中只有contains方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个射手座的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值