Update 集合源码.md

master
Omooo 5 years ago
parent 72c01d1e91
commit cd749247de
  1. 29
      blogs/Java/口水话/集合源码.md

@ -6,17 +6,18 @@
1. ArrayList 1. ArrayList
2. Vector 2. Vector
3. LinkedList 3. Stack
4. HashMap 4. LinkedList
5. Hashtable 5. HashMap
6. TreeMap 6. Hashtable
7. LinkedHashMap 7. TreeMap
8. HashSet 8. LinkedHashMap
9. TreeSet 9. HashSet
10. CopyOnWriteArrayList 10. TreeSet
11. ConcurrentHashMap 11. CopyOnWriteArrayList
12. SparseArray 12. ConcurrentHashMap
13. ArrayMap 13. SparseArray
14. ArrayMap
#### ArrayList #### ArrayList
@ -32,6 +33,12 @@ Vector 感觉是一个被人抛弃的类,它在初始化时直接设置了数
当然,想让 ArrayList 变成线程安全的,还可以使用 Collections.synchronizedList 来做,或者呢,使用 CopyOnWriteArrayList。 当然,想让 ArrayList 变成线程安全的,还可以使用 Collections.synchronizedList 来做,或者呢,使用 CopyOnWriteArrayList。
Vector 基本上没人用过,但是它的一个子类大家可能会用过,那就是 Stack。
#### Stack
Stack 是继承于 Vector 的,所以它也是线程安全的,它总共代码就二三十行。所有实现都是在父类 Vector 中,在我们调用 push 时就是往数组末尾 add 一个数据,pop 时就是获取数组的最后一个元素。和 Vector 不同的是,它的初始容量为空。还有需要注意的是,在调用 peek/pop 时,如果栈为空,是会抛 EmptyStackException 的。
#### LinkedList #### LinkedList
LinkedList 实现了 Deque 接口,说明它是一个双向链表,每一个 Node 节点都有 prev 和 next 指针,每次 add 或者 remove 时都需要更新前驱和后指针,在指定 index 位置删除时,会区分 index 如果是靠头部比较近,就从头 first 节点遍历删,否则从尾部 last 节点删。使用迭代器时,也是可以使用 ListIterator 从头或从尾遍历。 LinkedList 实现了 Deque 接口,说明它是一个双向链表,每一个 Node 节点都有 prev 和 next 指针,每次 add 或者 remove 时都需要更新前驱和后指针,在指定 index 位置删除时,会区分 index 如果是靠头部比较近,就从头 first 节点遍历删,否则从尾部 last 节点删。使用迭代器时,也是可以使用 ListIterator 从头或从尾遍历。

Loading…
Cancel
Save