转载请注明源出处:http://www.cnblogs.com/lighten/p/7426522.html

1.前言

  HashTable这个类很奇特,其继承了Dictionary这个没有任何具体实现类,而后实现了Map接口。Dictionary对大部分人而言都十分陌生,因为这个类并没有什么用,其出现在JDK1.0,而Map接口最早出现在JDK1.2。这个应该是JDK自己的类体系进行了调整,使得Dictionary类没有什么价值。在HashMap中我就提到过HashTable,这两个类最大的区别就是HashTable是线程安全的,且HashTable不允许空的键值。实际上现在使用HashTable的可能性比较低了,其表现不如HashMap,线程安全也可以选择性能更高的ConcurrentHashMap。不过还是对其进行简单的介绍,实现也是比HashMap简单多了。

2.Hashtable

  Hashtable拥有和HashMap相似的结构,这里不进行过多描述。threshold就是表需要扩容的阈值,loadFactor就是用来计算这个阈值的载入因子,其乘上表的大小就是阈值了。一般为0.75f,意味着hash表的3/4有数据就进行扩容。

  上面是一般的构造函数,默认大小11,载入因子0.75f。

  get方法就可以看出,其对null没有进行处理。插入hash表也是一般的方法,计算hash值,先做与操作保证hash值为正数,再取余保证落在hash表上。之后就是hash桶的链表遍历了,找到对应的值。

  put方法限制了存入空值。插入也是一样的,先计算出落在hash表上的位置,再查找其原来存在与否,存在就替换旧值,返回。不存在就添加。

  添加的过程先判断是否达到扩容的阈值,到了就扩容。重新计算键的hash值和在hash表上的位置。之后就将其放在链表表头。这个过程和WeakHashMap是类似的。

  remove方法一样,找到Hash表上的位置,遍历找到该值,将前面的节点和后面的节点连起来就可以了。

  其它的方法不进行介绍了,较为简单。

3.后记

  HashTable是最早的类之一,目前使用的场景不大,键值不为null可以自己判断,至于线程安全也可以被Collections.synchronizedMap(HashMap)或者效率更高的ConcurrentHashMap取代。所以该类不推荐使用,毕竟HashMap和ConcurrentHashMap进行了大量的优化。

Java之集合(十四)Hashtable的更多相关文章

  1. Java中的集合(十四) Map的实现类LinkedHashMap

    Java中的集合(十四) Map的实现类LinkedHashMap 一.LinkedHashMap的简介 LinkedHashMap是Map接口的实现类,继承了HashMap,它通过重写父类相关的方法 ...

  2. Java进阶(三十四)Integer与int的种种比较你知道多少?

    Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...

  3. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  4. 《Java程序设计》十四次作业

    <Java程序设计>十四次作业实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 3. 代码量统计 周次 总代码量 新增代码量 总文件数 新增 ...

  5. “全栈2019”Java多线程第十四章:线程与堆栈详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. “全栈2019”Java异常第十四章:将异常输出到文本文件中

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  7. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第七十四章:内部类与静态内部类相互嵌套

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第六十四章:接口与静态方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. C++之类和对象课后习题1

    建立一个对象数组,内放5个学生的(学号,成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生的最高成绩者,并输出其学号. #include<iostream> ...

  2. IoC的基本概念

    一.什么是IOC ioc是一个英文缩写,英文全称是 Inversion of Control,翻译过来是“控制反转”.理解好Ioc的关键是要明确“谁控制谁,控制了什么,为何是反转,哪些方面反转了” 谁 ...

  3. win7-64bit下安装Scipy

    一直用MAC写python,但京东给的本装的是win7系统,在安装scipy时各种报错,最后错误提示为: no lapack/blas resources found 开始一顿搜,爆栈给出的解决方案是 ...

  4. python面向对象-1方法、构造函数

    类是指:描述一种事物的定义,是个抽象的概念 实例指:该种事物的一个具体的个体,是具体的东西 打个比方: “人”是一个类.“张三”是人类的一个具体例子 在编程时也是同样的道理,你先自己定义一个“类”,当 ...

  5. An existing resource has been found at location D:\Tomcat 7\apache-tomcat-7.0.55\webapps。。。

    这个错误是说你的资源丢失,就是说tomcat无法解析你的.class文件,需要自己重新配置一下. 解决方法: 右击项目名 ---> 点击properties --> 在搜索栏里 输入 WE ...

  6. VS 附加不上w3wp.exe

    今天调用VS 附加不上w3wp.exe,其他的站点都能附加上,就有一个站附加不上,找了各种可能都没有解决,结果发现是版本被编译成release了,原来的配置都是debug的,不知道被谁给改成relea ...

  7. 如何手动编译java文件

    1,在编辑框中,将目录切至java文件所在的地址 如图 2,开始编译java文件 用命令javac 编译目标java文件,文件需带后缀名 ; 用java 执行class, 此时class文件无需带后缀 ...

  8. hdu 4268 贪心+set lower_bound用法

    http://acm.hdu.edu.cn/showproblem.php?pid=4268 A想用手里的牌尽量多地覆盖掉B手中的牌.. 牌有h和w 问A手中的牌最多能覆盖B多少张牌 iterator ...

  9. arduino远程刷新(烧录)固件

    在车间部署了十几个网络版的温湿度采集器(基于arduino的),这些采集器分布在不同的地方,现在要更新一下上面的固件.最笨的方法是一个一个地取下来,插到电脑的USB接口上进行固件更新,这样做显然很麻烦 ...

  10. Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock

    在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...