博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashTable
阅读量:5793 次
发布时间:2019-06-18

本文共 1061 字,大约阅读时间需要 3 分钟。

hot3.png

  • Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射
  • Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口
  • Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null

39567421430cf5b5f49f67ac9e07d33d3ea.jpg

  • 与HashMap不同的是Hashtable是继承Dictionary,实现了Map接口
  • Map是"key-value键值对"接口,Dictionary是声明了操作"键值对"函数接口的抽象类

2fa5db05d03bf9adbcf96ebd4c9cc6516db.jpg

第三个构造函数:

12d792db7f5cfe2aa2c2ed879fce556ebdb.jpg

(1)table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。 

(2)count是Hashtable的大小,它是Hashtable保存的键值对的数量。 

(3)threshold是Hashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值="容量*加载因子"。

(4)loadFactor就是加载因子。

(5)modCount是用来实现fail-fast机制的

abf3ef872974c10bde5641fbc9ab1ab1fb2.jpg

put 方法

  • Hashtable中的key和value是不允许为空的
  • 当我们想要想Hashtable中添加元素的时候,首先计算key的hash值,然后通过hash值确定在table数组中的索引位置,最后将value值替换或者插入新的元素,如果容器的数量达到阈值,就会进行扩充

71bb9820dd5f86a067beb77477f7b7b58d9.jpg

get 方法

  • 同样也是先获得索引值,然后进行遍历,最后返回

59bc113f1c88c4d4f65631aea864ee3bbd7.jpg

Hashtable和HashMap到底有哪些不同呢:

  • 基类不同:HashTable基于Dictionary类,而HashMap是基于AbstractMap
    • Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类
    • 而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作
  • null不同:HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null
  • 线程安全:HashMap时单线程安全的,Hashtable是多线程安全的
  • 遍历不同:HashMap仅支持Iterator的遍历方式,Hashtable支持Iterator和Enumeration两种遍历方式

转载于:https://my.oschina.net/u/3847203/blog/2251055

你可能感兴趣的文章