|
|
简介
HashTable
和HashMap
一样都是实现了哈希表,存储的内容是key-value映射。HashTable
采用拉链法处理Hash冲突。
- HashTable 是线程安全的。
- key、value都不能为null。
- 不是有序的。
源码分析
属性
|
|
构造方法
|
|
Entry
HashTable
中的每一个元素都是一个Entry,实际上table的每个桶里保存的都是一个单向链表,由Entry维护一个next引用。
方法
get
|
|
put
|
|
rehash
jdk 1.8中HashMap
对扩容做了优化,将原链表分为高低链表进行迁移,始终保证table的大小是偶数2的幂次方。
而在此HashTable
中可以看出扩容后,仍然需要重新计算每个元素的hash值。rehash方法会把table大小翻倍并加1,始终保证table的大小是奇数。
remove
|
|
迭代和枚举
HashaTable
的内部类Enumerator
实现了迭代器Iterator
和枚举Enumeration
两个接口。