Skip to content

Commit 3f60987

Browse files
Update note about Java Collection framework
Add Java Collection history Add note about Collection interface, Map interface...etc
1 parent 950c55c commit 3f60987

File tree

1 file changed

+222
-51
lines changed

1 file changed

+222
-51
lines changed

java/basic/java-collection.md

Lines changed: 222 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,70 @@
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集合概述
5261
Java的集合类位于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

Comments
 (0)