• 一、基础篇--1.2Java集合-HashMap和HashTable的区别


    HashMap和HashTable的区别

    1.继承的父类不同,HashMap继承的是AbstractMap类,HashTable继承的是Dictionary类,不过都实现了Map、Clone、Serializable三个接口。其中Dictionary类中注释说是一个被废弃的类,建议实现Map接口,如下图:

     * NOTE: This class is obsolete.  New implementations should
    
     * implement the Map interface, rather than extending this class.
    

    2.HashTable key和value都不支持null,会抛出空指针异常;HashMap中key可以为null,这样的键只有这一个。

    3.线程安全不同,HashMap线程不安全,HashTable线程安全,但是性能低下不推荐。

    4.遍历方式有区别,HashMap用的是fail-fast迭代器。

    5.初始容量大小和每次扩充容量大小的不同。Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。创建时,如果给定了容量初始值,那么Hashtable会直接使用你给定的大小,而HashMap会将其扩充为2的幂次方大小。也就是说Hashtable会尽量使用素数、奇数。而HashMap则总是使用2的幂作为哈希表的大小。

    之所以会有这样的不同,是因为Hashtable和HashMap设计时的侧重点不同。Hashtable的侧重点是哈希的结果更加均匀,使得哈希冲突减少。当哈希表的大小为素数时,简单的取模哈希的结果会更加均匀。而HashMap则更加关注hash的计算效率问题。在取模计算时,如果模数是2的幂,那么我们可以直接使用位运算来得到结果,效率要大大高于做除法。HashMap为了加快hash的速度,将哈希表的大小固定为了2的幂。当然这引入了哈希分布不均匀的问题,所以HashMap为解决这问题,又对hash算法做了一些改动。这从而导致了Hashtable和HashMap的计算hash值的方法不同 。

    6.计算hash值的方法不同

    HashTable直接使用对象的HashCode,HashMap为了解决冲突比较多,计算HashCode后又进行了一些运算数据

    https://blog.csdn.net/wangxing233/article/details/79452946

  • 相关阅读:
    高性能异步爬虫
    线程池在爬虫案例中的应用
    线程池的基本使用
    requests代理爬取
    python验证码识别
    获取人人网当前用户的个人详情页数据
    模拟登录人人网
    移远BC26基础开发之程序结构 三
    移远BC26基础开发之配置 二
    移远BC26/BC28(略)/MC20开发之环境搭建 一
  • 原文地址:https://www.cnblogs.com/foreverYoungCoder/p/10395830.html
Copyright © 2020-2023  润新知