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