转载请注明源出处: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. 实现WIFI MAC认证与漫游

    前言 单位里有10来个网件的AP(WNAP210),需要对接入端(主要是手机)进行MAC认证,原来采用AP本地MAC认证,但是人员经常变动(离职),另外人员的岗位(流水线)也经常调整,这样就需在变动后 ...

  2. HDU 1756 Cupid's Arrow (几何问题,判定点在多边形内部)

    题意:中文的么,自己看喽. 析:很容易明白是判定点是不是在多边形内部,一般是向量来判定,我一开始用点在向量的右侧,因为是顺时针给的,只要点全在外侧或边上, 就可以,暴力一下就ok.由于这个是浮点数,一 ...

  3. JAVA开发常用计算机命令

    系统常用命令 win+r > control (可进入控制面板,管理工具,服务) win+r > cmd > systeminfo (x86-based 指32位系统,x86-64 ...

  4. IntelliJ IDEA 14 Keygen

    package keygen; import java.math.BigInteger; import java.util.Date; import java.util.zip.CRC32; publ ...

  5. struts2和JSON的数据交互

    一.实验环境 1.struts2基本包 2.json-plugin 在struts2的lib下可以找到. 3.web.xml 加入struts2 <filter> <filter-n ...

  6. SSH整合 第四篇 Spring的IoC和AOP

    这篇主要是在整合Hibernate后,测试IoC和AOP的应用. 1.工程目录(SRC) 2.IoC 1).一个Service测试类 /* * 加入spring容器 */ private Applic ...

  7. OpenGL ES 光照模型之——环境光照(RenderMonkey测试)

    概述及目录(版权所有,请勿转载 www.cnblogs.com/feng-sc/) 本文总结如何在RenderMonkey下做简单的OpenGL ES环境光光照模型测试. 主要包括如下内容: 1.使用 ...

  8. HDU1312 Red and Black(DFS) 2016-07-24 13:49 64人阅读 评论(0) 收藏

    Red and Black Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  9. spark ml 的例子

    一.关于spark ml pipeline与机器学习 一个典型的机器学习构建包含若干个过程 1.源数据ETL 2.数据预处理 3.特征选取 4.模型训练与验证 以上四个步骤可以抽象为一个包括多个步骤的 ...

  10. AtCoder - 4351 Median of Medians(二分+线段树求顺序对)

    D - Median of Medians Time limit : 2sec / Memory limit : 1024MB Score : 700 pointsProblem Statement ...