HashTable与LinkedHashMap
HashTable的特点 HashTable继承自Dictionary类,Dictionary 类是一个抽象类,在JDK 1.0中提供用来存储键/值对,作用和Map类相似。 HashTable类中,其数据结构与HashMap是相同的。依然是采用“链地址法”实现的哈希表,保存实际数据的,依然是Entry对象。 Entry<K,V> implements Map.Entry<K,V> { int hash; final K key; V value; Entry<K,V> next; } 和HashMap很类似 不同点: 1、HashTable是线程安全的(synchronized),HashMap线程不安全 2、HashTable是key和value不能为null,而HashMap允许key和value为空。 3、使用的迭代器不同,Hashtable的迭代器(enumerator)。 put方法 put方法的主要逻辑如下: 1. 先获取synchronized锁。 2. put方法不允许null值,如果发现是null,则直接抛出异常(key和value都不能为null)。 3. 计算key的哈希值和index 4. 遍历对应位置的链表,如果发现已经存在相同的hash和key,则更新value,并返回旧值。 5. 如果不存在相同的key的Entry节点,则增加节点。在新增节点时