JDK源码(二十五):Hashtable
Posted jdkSpring
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK源码(二十五):Hashtable相关的知识,希望对你有一定的参考价值。
类名
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable
变量
// hash表
private transient Entry<?,?>[] table;
// hash表中的条目总数.
private transient int count;
/**
* 当表的大小超过此阈值时,将重新hash该表。
*(此字段的值为(int)(容量*负载因子))
*/
private int threshold;
// 负载因子
private float loadFactor;
//此字段用于使哈希表集合视图上的迭代器fail-fast.
private transient int modCount = 0;
put(K key, V value)
从put方法我们可以看出Hashtable的key-value都不可以为空。首先判断value是不是为null,然后循环table,当key已经存在的时候,修改value值。当key不存在的时候,添加一个Entry。当table的容量不足时,则调用rehash方法。
rehash()
get(Object key)
HashTable与HashMap的区别
HashTable基于Dictionary类,而HashMap是基于AbstractMap。Dictionary是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的实现,它以最大限度地减少实现此接口所需的工作。
HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null。
Hashtable的方法是同步的,而HashMap的方法不是。
源码(JDK1.8)
以上是关于JDK源码(二十五):Hashtable的主要内容,如果未能解决你的问题,请参考以下文章
android源码解析(二十五)-->onLowMemory执行流程