JDK源码(二十五):Hashtable

Posted jdkSpring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK源码(二十五):Hashtable相关的知识,希望对你有一定的参考价值。

java.util.Hashtable实现了一个哈希表,存储key-value。任何非null对象都可以用作键或值。要成功地从哈希表存储和检索对象,用作键的对象必须实现hashCode方法和equals方法。
Hashtable的实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中buckets的数目,初始容量只是创建哈希表时的容量。注意,在“散列冲突”的情况下,一个bucket存储多个条目,这些条目必须按顺序搜索。加载因子是在哈希表的容量自动增加之前允许获得的满容量的度量。初始容量和负载因子参数只是用于实现。关于何时以及是否调用rehash方法的确切细节取决于实现。

类名

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()

JDK源码(二十五):Hashtable

get(Object key)

JDK源码(二十五):Hashtable

HashTable与HashMap的区别

  1. HashTable基于Dictionary类,而HashMap是基于AbstractMap。Dictionary是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的实现,它以最大限度地减少实现此接口所需的工作。

  2. HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null。

  3. Hashtable的方法是同步的,而HashMap的方法不是。

源码(JDK1.8)
JDK源码(二十五):Hashtable

以上是关于JDK源码(二十五):Hashtable的主要内容,如果未能解决你的问题,请参考以下文章

Java之集合(二十五)ConcurrentHashMap

java源码之HashMap和HashTable的异同

android源码解析(二十五)-->onLowMemory执行流程

Django 第二十五篇Django admin源码解析

HashMap与HashTable的哈希算法——JDK1.9源码阅读总结

HashTable的故事----Jdk源码解读