1- https://www.w3resource.com/java-tutorial/java-collections.php
2-
3- <!-- GFM-TOC -->
4- * [ 一、概览] ( #一概览 )
5- * [ Collection框架] ( #collection )
6- * [ Map框架] ( #map )
7- * [ Concurrent框架] ( #concurrent )
8- * [ ]
9- * [ 二、容器中的设计模式] ( #二容器中的设计模式 )
1+ # 目录
2+ * [ 0. Java集合框架历史] ( #Java集合框架历史 )
3+ * [ 1. Java集合概述] ( #1.Java集合概述 )
4+ * [ Collection集合概述] ( Collection集合概述 )
5+ * [ Map集合概述] ( #Map集合概述 )
6+ * [ Concurrent包下的集合概述] ( #Concurrent包下的集合概述 )
7+
8+ * [ 2. Java集合详解] ( #2.Java集合详解 )
9+ * [ Collection集合下常用实现类详解] ( #Collection集合下常用实现类详解 )
10+ * [Iterator接口源码解析](#Iterator接口源码解析)
11+ * [Collection接口源码解析](#Collection接口源码解析)
12+ * [List接口源码解析](#List接口源码解析)
13+ * [AbstractCollection抽象类源码解析](#AbstractCollection抽象类源码解析)
14+ * [AbstractList抽象类源码解析](#AbstractList源码解析)
15+ * [ArrayList源码解析和使用](#ArrayList源码解析和使用)
16+ * [Vector源码解析和使用](#Vector源码解析和使用)
17+ * [Stack源码解析和使用](#Stack源码解析和使用)
18+ * [AbstractSequentialList抽象类源码解析](#AbstractSequentialList抽象类源码解析)
19+ * [LinkedList源码解析和使用](#LinkedList源码解析和使用)
20+ * [Set接口源码解析](#Set接口源码解析)
21+ * [AbstractSet源码解析](#AbstractSet源码解析)
22+ * [HashSet源码解析和使用](#HashSet源码解析和使用)
23+ * [TreeSet源码解析和使用](#TreeSet源码解析和使用)
24+ * [Queue接口源码解析](#Queue接口源码解析)
25+ * [Deque接口源码解析](#Deque接口源码解析)
26+ * [LinkedList使用](#LinkedList使用)
27+ * [Map集合下常用实现类详解](#Map集合下常用实现类详解)
28+ * [AbstractMap接口源码解析](#AbstractMap接口源码解析)
29+ * [HashMap源码解析和使用](#HashMap源码解析和使用)
30+ * [WeakHashMap源码解析和使用](#WeakHashMap源码解析和使用)
31+ * [TreeHashMap源码解析和使用](#TreeHashMap源码解析和使用)
32+ * [HashTable源码解析和使用](#HashTable源码解析和使用)
33+ * [Concurrent包下常用实现类详解](#Concurrent包下常用实现类详解)
34+
35+ * [ 3. 集合框架中体现的设计模式和编程规范] ( #3.集合框架中体现的设计模式和编程规范 )
1036 * [ 迭代器模式] ( #迭代器模式 )
1137 * [ 适配器模式] ( #适配器模式 )
12- * [ 三、源码分析] ( #三源码分析 )
13- * [ ArrayList] ( #arraylist )
14- * [ Vector] ( #vector )
15- * [ CopyOnWriteArrayList] ( #copyonwritearraylist )
16- * [ LinkedList] ( #linkedlist )
17- * [ HashMap] ( #hashmap )
18- * [ ConcurrentHashMap] ( #concurrenthashmap )
19- * [ LinkedHashMap] ( #linkedhashmap )
20- * [ WeakHashMap] ( #weakhashmap )
38+
39+ * [ 4. 其他] ( #4.其他 )
40+ * [ fail-fast机制] ( #fail-fast机制 )
41+ * [ MarkerInterface] (#Marker Interface)
42+ * [ Collections工具类-操作集合] ( )
43+ * [ Arrays工具类-操作数组] ( )
44+ * [ 5. 圈重点] ( #5.圈重点 )
45+
2146* [ 参考资料] ( #参考资料 )
22- <!-- GFM-TOC -->
2347
24- # Definationis
25- * Iterator: public interface Iterator<E >
26- * Iterable: public interface Iterable<T >
27- * Collection: public interface Collection<E > extends Iterable<E >
28- * List:
29- * ArrayList
30- * LinkedList
31- * Stack
32- * Vector
33- * Set:
34- * HashSet
35- * LinkedHashSet
36- * TreeSet
37- * Queue:
38- * PriorityQueue
39- * ArrayDeque
40- * LinkedList(Deque)
41- * Map
42- * HashMap
43- * HashLinkedMap
44- * HashTable
45- * TreeMap
46- https://www.cnblogs.com/skywang12345/p/3308498.html
47- https://www.journaldev.com/1260/collections-in-java-tutorial
48- https://www.cnblogs.com/skywang12345/p/3308762.html
49- https://www.cnblogs.com/skywang12345/tag/%E9%9B%86%E5%90%88/
50- # 一、概览
48+ # 0.Java集合框架历史
49+
50+ 摘自Wikipedia [ Java Collection Framework] ( https://en.wikipedia.org/wiki/Java_collections_framework ) :
51+ ```
52+ Collection implementations in pre-JDK 1.2 versions of the Java platform included few data structure classes, but did not contain a collections framework.[3] The standard methods for grouping Java objects were via the array, the Vector, and the Hashtable classes, which unfortunately were not easy to extend, and did not implement a standard member interface.[4]
53+
54+ To address the need for reusable collection data structures, several independent frameworks were developed,[3] the most used being Doug Lea's Collections package,[5] and ObjectSpace Generic Collection Library (JGL),[6] whose main goal was consistency with the C++ Standard Template Library (STL).[7]
55+ ```
56+
57+ 可知,早期的Java Group通过Array, Vector, HashTable这些类来实现,但是他们难扩展,后期大神们创建了独立的Java Data Structure Framework,并且在日后这些framework被build进入JDK中,慢慢形成了Java Collection Framework。
5158
59+
60+ # 1.Java集合概述
5261Java的集合类位于java.util.* 包下,大体分为2类,Collection和Map,另外就是2个工具类。Concurrent是jdk1.5引入的(在这之前java语言内置对多线程的支持比较有限),主要代码由Doug Lea完成。
5362
63+
64+ ## Collection集合概述
65+
66+ 1 . 概述
67+
5468* Collection包含3个分支
5569 ```
5670 AbstractCollection是抽象类,实现了部分Collection中的API,如contains,toArray, remove, toString等方法。
@@ -67,10 +81,87 @@ Java的集合类位于java.util.*包下,大体分为2类,Collection和Map,
6781 ```
6882 Set是一个不允许有重复元素的集合。 AbstractSet是抽象类,实现了Set中的大部分API,常见的实现类有HashSet, TreeSet。
6983 ```
84+
85+ 2. 源码阅读
86+
87+ `接口定义`:
88+ ```java
89+ /* 说明:
90+ Collection集合用于存Object的,不支持存储基础数据类型,这是由Collection接口的定义决定的: Collection<E>
91+ 这样写会报错: Syntax error, insert "Dimensions" to complete ReferenceType
92+ List<int> ints = new ArrayList<int>();
93+ */
94+ public interface Collection<E> extends Iterable<E>
95+
96+ ```
97+
98+ ` 常用方法 `
99+ ``` java
100+ abstract boolean add(E object)
101+ // addAll参数为E或E的子类
102+ abstract boolean addAll(Collection<? extends E > collection)
103+ abstract void clear()
104+ abstract boolean contains(Object object)
105+ abstract boolean containsAll(Collection<?> collection)
106+ abstract boolean equals(Object object)
107+ abstract int hashCode()
108+ abstract boolean isEmpty()
109+ abstract Iterator<E > iterator()
110+ abstract boolean remove(Object object)
111+ abstract boolean removeAll(Collection<?> collection)
112+ abstract boolean retainAll(Collection<?> collection)
113+ /*
114+ * Returns the number of elements in this collection. If this collection
115+ * contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
116+ * <tt>Integer.MAX_VALUE</tt>.
117+ * Integer.MIN_VALUE是-(2的31次方),Integer.MAX_VALUE是2的31次方减1
118+ */
119+ abstract int size()
120+ abstract < T > T [] toArray(T [] array)
121+ abstract Object [] toArray()
122+ ```
123+
124+
125+ ## Map集合概述
126+ 1 . 概述
70127* Map包含1个分支
71128 ```
72129 Map是一个映射接口,即key-value的键值对。AbstractMap是抽象类,实现了Map中的大部分API,HashMap, TreeMap, WeakHashMap是其实现类。
73130 ```
131+
132+ 2. 源码阅读
133+ `接口定义`
134+ ```java
135+ public interface Map<K,V>
136+ ```
137+
138+ ` 常用方法 `
139+ ``` java
140+ abstract void clear()
141+ abstract boolean containsKey(Object key)
142+ abstract boolean containsValue(Object value)
143+ abstract Set<Entry<K , V > > entrySet()
144+ abstract boolean equals(Object object)
145+ abstract V get(Object key)
146+ abstract int hashCode()
147+ abstract boolean isEmpty()
148+ abstract Set<K > keySet()
149+ abstract V put(K key, V value)
150+ abstract void putAll(Map<? extends K , ? extends V > map)
151+ abstract V remove(Object key)
152+ abstract int size()
153+ abstract Collection<V > values()
154+ ```
155+
156+ Map 是一个键值对(key-value)映射接口。Map映射中不能包含重复的键;每个键最多只能映射到一个值。
157+ Map 接口提供三种collection 视图,允许以键集(keySet())、值集(values())或键-值(entrySet())映射关系集的形式查看某个映射的内容。[ MapTest1.java] ( )
158+ Map 映射顺序。有些实现类,可以明确保证其顺序,如 TreeMap;另一些映射实现则不保证顺序,如 HashMap 类。
159+ Map 的实现类应该提供2个“标准的”构造方法:第一个,void(无参数)构造方法,用于创建空映射;第二个,带有单个 Map 类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。
160+
161+
162+ ## Concurrent包下的集合概述
163+
164+ 1 . 概述
74165* Concurrent主要有3个package组成
75166 * java.util.concurrent
76167 ```
@@ -84,13 +175,93 @@ Java的集合类位于java.util.*包下,大体分为2类,Collection和Map,
84175 ```
85176 提供锁相关的类,如Lock, ReentrantLock, ReadWriteLock, Confition等
86177 ```
87- * 工具类
88- * Arrays: 操作数组
89- * Collections: 操作集合
90178
91- ## Collection
179+ # 2.Java集合详解
180+ ## Collection集合下常用实现类详解
181+ ### Iterator接口源码解析
182+ ### Collection接口源码解析
183+ ### List接口源码解析
184+ #### AbstractCollection抽象类源码解析
185+ #### AbstractList源码解析
186+ ##### ArrayList源码解析和使用
187+ ##### Vector源码解析和使用
188+ ##### Stack源码解析和使用
189+ #### AbstractSequentialList抽象类源码解析
190+ ##### LinkedList源码解析和使用
191+ ### Set接口源码解析
192+ #### AbstractSet源码解析
193+ ##### HashSet源码解析和使用
194+ ##### TreeSet源码解析和使用
195+ ### Queue接口源码解析
196+ ### Deque接口源码解析
197+ ##### LinkedList使用
198+ ## Map集合下常用实现类详解
199+ #### AbstractMap接口源码解析
200+ ##### HashMap源码解析和使用
201+ ##### WeakHashMap源码解析和使用
202+ ##### TreeHashMap源码解析和使用
203+ ##### HashTable源码解析和使用
204+ ## Concurrent包下常用实现类详解
205+
206+ # 3.集合框架中体现的设计模式和编程规范
207+ ## 迭代器模式
208+ ## 适配器模式
209+
210+ # 4.其他
211+ ## fail-fast机制
212+ ## Marker Interface
213+
214+ # 5.圈重点
215+ * Collection集合用于存Object的,不支持存储基础数据类型,这是由Collection接口的定义决定的: Collection<E>
216+
217+ # 参考资料
218+ * 集合框架图 https://img-blog.csdn.net/20160124221843905
219+ * Java集合框架概述 https://www.cnblogs.com/xiaoxi/p/6089984.html
220+
221+ # Definationis
222+ * Iterator: public interface Iterator<E>
223+ * Iterable: public interface Iterable<T>
224+ * Collection: public interface Collection<E> extends Iterable<E>
225+ * List:
226+ * ArrayList
227+ * LinkedList
228+ * Stack
229+ * Vector
230+ * Set:
231+ * HashSet
232+ * LinkedHashSet
233+ * TreeSet
234+ * Queue:
235+ * PriorityQueue
236+ * ArrayDeque
237+ * LinkedList(Deque)
238+ * Map
239+ * HashMap
240+ * HashLinkedMap
241+ * HashTable
242+ * TreeMap
243+ https://www.cnblogs.com/skywang12345/p/3308498.html
244+ https://www.journaldev.com/1260/collections-in-java-tutorial
245+ https://www.cnblogs.com/skywang12345/p/3308762.html
246+ https://www.cnblogs.com/skywang12345/tag/%E9%9B%86%E5%90%88/
247+ # 1. Java集合概述
248+
249+
250+
251+ ## Collection集合概述
252+ ## Map集合概述
253+ ## Concurrent包下的集合概述
254+
255+ # 2. 集合详解
256+ ## Collection集合下常用实现类详解
257+ ## Map集合下常用实现类详解
258+ ## Concurrent包下常用实现类详解
259+
260+ # 3. 集合框架中体现的设计模式和编程规范
261+ [迭代器模式](#迭代器模式)
262+ [适配器模式](#适配器模式)
92263
93- <div align="center"> <img src="https://github.com/pics/73403d84-d921-49f1-93a9-d8fe050f3497.png" width="800px"> </div><br>
264+ # 其他
94265
95266### 1. Set
96267
0 commit comments