转载请注明源出处: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. matplotlib在MAC系统下中文字体显示问题

    最近想把部分python数据分析的代码从win系统迁移到MAC上,有部分图片上涉及中文显示,迁移到MAC上warning: UserWarning: findfont: Font family [u' ...

  2. yum 报错:centos yum (28, 'Connection time-out') Trying other mirror.

    前言: 在使用yum安装 软件时,经常出现 centos yum (28, 'Connection time-out') Trying other mirror. 或下面的那样情况imeout on ...

  3. UVaLive 4452 The Ministers' Major Mess (TwoSat)

    题意:有 m 个人对 n 个方案投票,每个人最多只能对其中的4个方案投票(其他的相当于弃权),每一票要么支持要么反对.问是否存在一个最终决定,使得每个投票人都有超过一半的建议被采纳,在所有可能的最终决 ...

  4. LA 3602 DNA Consensus String (暴力枚举)

    题意:给定m个长度为n的DNA序列,求一个最短的DNA序列,使得总Hamming距离最小. Hamming距离等于字符不同的位置个数. 析:看到这个题,我的第一感觉是算时间复杂度,好小,没事,完全可以 ...

  5. UVa 10382 Watering Grass (区间覆盖贪心问题+数学)

    题意:有一块长为l,宽为w的草地,在其中心线有n个喷水装置,每个装置可喷出以p为中心以r为半径的圆, 选择尽量少的装置,把草地全部润湿. 析:我个去啊,做的真恶心,看起来很简单,实际上有n多个坑啊,首 ...

  6. MemCachedClient 节点失效时的处理

    引入jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...

  7. POP介绍与使用实践(快速上手动画)[转]

    前言 动画在APP开发过程中 大家多多少少都会接触到 而且随着ios7的扁平化风格启用之后 越来越多的APP开始尝试加入各种绚丽的动画交互效果以增加APP的用户体验(当然 还是以国外的APP居多) 有 ...

  8. Ubuntu 16.04下安装网络流量分析工具 Wireshark

    本文链接地址:https://www.linuxidc.com/Linux/2016-08/134526.htm 切勿用商业用途 sudo apt-add-repository ppa:wiresha ...

  9. 《Android开发艺术探索》第11章 Android的线程和线程池

    第11章 Android的线程和线程池 11.1 主线程和子线程 (1)在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程.Android中的主线程主要处理和界 ...

  10. struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)

    dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) Xml代码 : <result name="success">/main.jsp</re ...