auto commit

This commit is contained in:
CyC2018
2018-03-23 22:53:19 +08:00
parent 10913ae33d
commit 3c263dc2c5

View File

@ -488,13 +488,12 @@ private V putForNullKey(V value) {
### 6. 与 HashTable 的区别
- HashMap 几乎可以等价于 Hashtable HashMap 是非 synchronized 并可以接受 null(HashMap 可以接受为 null 的键值 (key) 和值 (value) Hashtable 则不行)
- HashMap 是非 synchronized Hashtable synchronized这意味着 Hashtable 是线程安全的多个线程可以共享一个 Hashtable而如果没有正确的同步的话多个线程是不能共享 HashMap Java 5 提供了 ConcurrentHashMap它是 HashTable 的替代 HashTable 的扩展性更好
- 另一个区别是 HashMap 的迭代器 (Iterator) fail-fast 迭代器 Hashtable enumerator 迭代器不是 fail-fast 所以当有其它线程改变了 HashMap 的结构增加或者移除元素将会抛出 ConcurrentModificationException但迭代器本身的 remove() 方法移除元素则不会抛出 ConcurrentModificationException 异常但这并不是一个一定发生的行为要看 JVM这条同样也是 Enumeration Iterator 的区别
- 由于 Hashtable 是线程安全的也是 synchronized所以在单线程环境下它比 HashMap 要慢如果你不需要同步只需要单一线程那么使用 HashMap 性能要好过 Hashtable
- HashTable 是同步的它使用 synchronized 来进行同步它也是线程安全的多个线程可以共享同一个 HashTableHashMap 不是同步的但是可以使用 ConcurrentHashMap它是 HashTable 的替代且比 HashTable 可扩展性更好
- HashMap 可以插入键为 null Entry
- HashMap 的迭代器是 fail-fast 迭代器 Hashtable enumerator 迭代器不是 fail-fast
- 由于 Hashtable 是线程安全的也是 synchronized所以在单线程环境下它比 HashMap 要慢
- HashMap 不能保证随着时间的推移 Map 中的元素次序是不变的
## LinkedHashMap
[LinkedHashMap.java](https://github.com/CyC2018/JDK-Source-Code/tree/master/src/HashMap.java)