From fe7fc90e94ac195fdb139a2f158e71dbf9ccbbdf Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 11 Mar 2018 11:43:47 +0800 Subject: [PATCH] auto commit --- notes/Java 容器.md | 102 +++++++++++++++--- pics/b9a39d2a-618c-468b-86db-2e851f1a0057.jpg | Bin 0 -> 16384 bytes pics/ce039f03-6588-4f0c-b35b-a494de0eac47.png | Bin 0 -> 28672 bytes 3 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 pics/b9a39d2a-618c-468b-86db-2e851f1a0057.jpg create mode 100644 pics/ce039f03-6588-4f0c-b35b-a494de0eac47.png diff --git a/notes/Java 容器.md b/notes/Java 容器.md index 6ae65b6b..332aae80 100644 --- a/notes/Java 容器.md +++ b/notes/Java 容器.md @@ -11,10 +11,19 @@ * [散列](#散列) * [源码分析](#源码分析) * [1. ArrayList](#1-arraylist) + * [概览](#概览) + * [Fail-Fast](#fail-fast) + * [和 Vector 的区别](#和-vector-的区别) + * [和 LinkedList 的区别](#和-linkedlist-的区别) * [2. Vector 与 Stack](#2-vector-与-stack) * [3. LinkedList](#3-linkedlist) * [4. TreeMap](#4-treemap) * [5. HashMap](#5-hashmap) + * [5.1 基本数据结构](#51-基本数据结构) + * [5.2 拉链法的工作原理](#52-拉链法的工作原理) + * [5.3 扩容](#53-扩容) + * [5.4 null 值](#54-null-值) + * [5.5 与 HashTable 的区别](#55-与-hashtable-的区别) * [6. LinkedHashMap](#6-linkedhashmap) * [7. ConcurrentHashMap](#7-concurrenthashmap) * [参考资料](#参考资料) @@ -105,6 +114,8 @@ java.util.Arrays#asList() 可以把数组类型转换为 List 类型。 [ArraList.java](https://github.com/CyC2018/JDK-Source-Code/tree/master/src/ArrayList.java) +### 概览 + 实现了 RandomAccess 接口,因此支持随机访问,这是理所当然的,因为 ArrayList 是基于数组实现的。 ```java @@ -182,6 +193,8 @@ private static int hugeCapacity(int minCapacity) { } ``` +### Fail-Fast + modCount 用来记录 ArrayList 结构发生变化的次数,结构发生变化是指添加或者删除至少一个元素的所有操作,或者是调整内部数组的大小,仅仅只是设置元素的值不算结构发生变化。 在进行序列化或者迭代等操作时,需要比较操作前后 modCount 是否改变,如果改变了需要抛出 ConcurrentModificationException。 @@ -205,14 +218,14 @@ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOExceptio } ``` -**和 Vector 的区别** +### 和 Vector 的区别 1. Vector 和 ArrayList 几乎是完全相同的,唯一的区别在于 Vector 是同步的,因此开销就比 ArrayList 要大,访问速度更慢。最好使用 ArrayList 而不是 Vector,因为同步操作完全可以由程序员自己来控制; 2. Vector 每次扩容请求其大小的 2 倍空间,而 ArrayList 是 1.5 倍。 为了获得线程安全的 ArrayList,可以调用 Collections.synchronizedList(new ArrayList<>()); 返回一个线程安全的 ArrayList,也可以使用 concurrent 并发包下的 CopyOnWriteArrayList 类; -**和 LinkedList 的区别** +### 和 LinkedList 的区别 1. ArrayList 基于动态数组实现,LinkedList 基于双向循环链表实现; 2. ArrayList 支持随机访问,LinkedList 不支持; @@ -234,13 +247,39 @@ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOExceptio [HashMap.java](https://github.com/CyC2018/JDK-Source-Code/tree/master/src/HashMap.java) -使用拉链法来解决冲突。 +### 5.1 基本数据结构 -默认容量 capacity 为 16,需要注意的是容量必须保证为 2 的次方。容量就是 Entry[] table 数组的长度,size 是数组的实际使用量。 +使用拉链法来解决冲突,内部包含了一个 Entry 类型的数组 table,数组中的每个位置被当成一个桶。 + +```java +transient Entry[] table; +``` + +其中,Entry 就是存储数据的键值对,它包含了四个字段。从 next 字段我们可以看出 Entry 是一个链表,即每个桶会存放一个链表。 + +

+ +### 5.2 拉链法的工作原理 + +使用默认构造函数新建一个 HashMap,默认大小为 16。Entry的类型为 <String, Integer>。先后插入三个元素:("sachin", 30), ("vishal", 20) 和 ("vaibhav", 20)。计算 "sachin" 的 hashcode 为 115,使用除留余数法得到 115 % 16 = 3,因此 ("sachin", 30) 键值对放到第 3 个桶上。同样得到 ("vishal", 20) 和 ("vaibhav", 20) 都应该放到第 6 个桶上,因此需要把 ("vaibhav", 20) 链接到 ("vishal", 20) 之后。 + +

+ +当进行查找时,需要分成两步进行,第一步是先根据 hashcode 计算出所在的桶,第二步是在链表上顺序查找。由于 table 是数组形式的,具有随机读取的特性,因此这一步的时间复杂度为 O(1),而第二步需要在链表上顺序查找,时间复杂度显然和链表的长度成正比。 + +### 5.3 扩容 + +设 HashMap 的 table 长度为 M,需要存储的键值对数量为 N,如果哈希函数满足均匀性的要求,那么每条链表的长度大约为 N/M,因此平均查找次数的数量级为 O(N/M)。 + +为了让查找的成本降低,应该尽可能使得 N/M 尽可能小,因此需要保证 M 尽可能大,可就是说 table 要尽可能大。HashMap 采用动态扩容来根据当前的 N 值来调整 M 值,使得空间效率和时间效率都能得到保证。 + +和扩容相关的参数主要有:capacity、size、threshold 和 load_factor。 + +capacity 表示 table 的容量大小,默认为 16,需要注意的是容量必须保证为 2 的次方。容量就是 table 数组的长度,size 是数组的实际使用量。 threshold 规定了一个 size 的临界值,size 必须小于 threshold,如果大于等于,就必须进行扩容操作。 -threshold = capacity * load_factor,其中 load_factor 为 table 数组能够使用的比例,load_factor 过大会导致聚簇的出现,从而影响查询和插入的效率,详见算法笔记。 +threshold = capacity * load_factor,其中 load_factor 为 table 数组能够使用的比例,load_factor 过大会导致聚簇的出现,从而影响查询和插入的效率,聚簇解释见底下的扩容操作。 ```java static final int DEFAULT_INITIAL_CAPACITY = 16; @@ -271,18 +310,45 @@ void addEntry(int hash, K key, V value, int bucketIndex) { } ``` -Entry 用来表示一个键值对元素,其中的 next 指针在序列化时会使用。 +扩容使用 resize() 实现,需要注意的是,扩容操作同样需要把旧 table 的所有键值对重新插入新的 table 中,因此这一步是很费时的。但是从均摊分析的角度来考虑,HashMap 的查找速度依然在常数级别。 ```java -static class Entry implements Map.Entry { - final K key; - V value; - Entry next; - final int hash; +void resize(int newCapacity) { + Entry[] oldTable = table; + int oldCapacity = oldTable.length; + if (oldCapacity == MAXIMUM_CAPACITY) { + threshold = Integer.MAX_VALUE; + return; + } + + Entry[] newTable = new Entry[newCapacity]; + transfer(newTable); + table = newTable; + threshold = (int)(newCapacity * loadFactor); +} + +void transfer(Entry[] newTable) { + Entry[] src = table; + int newCapacity = newTable.length; + for (int j = 0; j < src.length; j++) { + Entry e = src[j]; + if (e != null) { + src[j] = null; + do { + Entry next = e.next; + int i = indexFor(e.hash, newCapacity); + e.next = newTable[i]; + newTable[i] = e; + e = next; + } while (e != null); + } + } } ``` -get() 操作需要分成两种情况,key 为 null 和 不为 null,从中可以看出 HashMap 允许插入 null 作为键。 +### 5.4 null 值 + +get() 操作需要分成两种情况,key 为 null 和不为 null,从中可以看出 HashMap 允许插入 null 作为键。 ```java public V get(Object key) { @@ -338,6 +404,16 @@ private V putForNullKey(V value) { } ``` +### 5.5 与 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。 +- HashMap不能保证随着时间的推移Map中的元素次序是不变的。 + +> [What is difference between HashMap and Hashtable in Java?](http://javarevisited.blogspot.hk/2010/10/difference-between-hashmap-and.html) + ## 6. LinkedHashMap [LinkedHashMap.java](https://github.com/CyC2018/JDK-Source-Code/tree/master/src/HashMap.java) @@ -346,7 +422,7 @@ private V putForNullKey(V value) { [ConcurrentHashMap.java](https://github.com/CyC2018/JDK-Source-Code/tree/master/src/HashMap.java) -[ 探索 ConcurrentHashMap 高并发性的实现机制 ](https://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/) +[探索 ConcurrentHashMap 高并发性的实现机制](https://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/) # 参考资料 diff --git a/pics/b9a39d2a-618c-468b-86db-2e851f1a0057.jpg b/pics/b9a39d2a-618c-468b-86db-2e851f1a0057.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05c7e6cefb9d1c41d3d0386688be9b4dc53ea169 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/pics/ce039f03-6588-4f0c-b35b-a494de0eac47.png b/pics/ce039f03-6588-4f0c-b35b-a494de0eac47.png new file mode 100644 index 0000000000000000000000000000000000000000..d5025bb39dec2f90a86d40f0c79e150ef4ddf6c8 GIT binary patch literal 28672 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

=54Rzn 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 literal 0 HcmV?d00001