Loading [MathJax]/extensions/TeX/AMSsymbols.js

Hashtable原理

简介

  • 是一个散列表,它存储的内容是键值对(key-value)映射
  • 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口
  • 同步的,通过悲观锁synchronized实现,这意味着它是线程安全的
  • key、value都不可以为null
  • 映射不是有序的
  • 数据结构由数组+单向列表组成,数组决定桶的数量,单向列表采用链表法避免hash冲突
  • 初始容量 :容量是哈希表中桶的数量,默认为11
  • 加载因子:对哈希表在其容量自动增加之前可以达到多满的一个尺度。默认加载因子是 0.75
  • hash算法采用key的hashcode

构造函数

1
2
3
4
5
6
7
8
9
10
11
// 默认构造函数。
public Hashtable()

// 指定“容量大小”的构造函数
public Hashtable(int initialCapacity)

// 指定“容量大小”和“加载因子”的构造函数
public Hashtable(int initialCapacity, float loadFactor)

// 包含“子Map”的构造函数
public Hashtable(Map<? extends K, ? extends V> t)

数据结构

  • table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的”key-value键值对”都是存储在Entry数组中的
  • count是Hashtable的大小,它是Hashtable保存的键值对的数量
  • threshold是Hashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值=”容量*加载因子”,当Hashtable的 “实际容量” >= “阈值”时,(阈值 = 总的容量 x 加载因子),就将变为“原始容量x2 + 1”。
  • loadFactor就是加载因子
  • modCount是用来实现fail-fast机制

遍历方式

  • 实现了Enumeration接口,通过枚举接口实现遍历
  • 实现了迭代器接口,通过迭代器遍历



版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接,感谢各位看官!!!

本文出自:monkeyGeek

座右铭:生于忧患,死于安乐

欢迎志同道合的朋友一起交流、探讨!

monkeyGeek

评论

Related Issues not found

Please contact @monkeyGeek369 to initialize the comment

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×