java.util.Collection
- LinkedList
- 包含 prev、next 的链接表
- Node{item, next, prev}
- ArrayList、Vector、Stack
- 可扩容数组,ArrayList 扩容的大小原来的 1.5 倍,Vector 扩容一个指定大小或原来大小 2 倍,数组大小超过 Integer.MAX_VALUE 都抛出 oom
- 其中 Stack 中元素为 0 个则 pop、peek、search 操作会一直阻塞
- Vector Stack 都是加同步锁线程安全的,所以单线程效率不高
- TreeSet
- 基于 TreeMap
- 通过持有一个 TreeMap 实例实现,其中 TreeSet 的 value 变成 TreeMap 的 k,传给 TreeMap 的 v 是一个 TreeSet 持有的 private static final Object PRESENT = new Object() 实例
- HashSet
- 基于 HashMap
- 不可重复的值,基于 HashMap 的 key 不可重复实现
- 通过持有一个 HashMap 实例实现,其中 HashSet 的 value 变成 HashMap 的 k,传给 HashMap 的 v 是一个 HashSet 持有的 private static final Object PRESENT = new Object() 实例
- LinkedHashSet
- 基于 LinkedHashMap
- 父类是 HashSet
- 维护一个有序的输出(按插入顺序)
- Hashtable
- K 和 V 均不能为
null
- Entry{hash, key, value, next}
- Entry< ?, ? >[] table
- 线程安全
- TreeMap
- Entry root:链表,其实是一棵树
- 使用红黑树算法,输出有序
- 根据 K 进行比较判断是插入树的 L 还是 R 或直接替换 Self 的值
- K 不能为
null
- Entry{key, value, left, right, parent}
- navigableKeySet().iterator()
- HashMap
- Node[] table:数组形式
- K 和 V 均可为
null
- Node{hash, key, value, next}
- keySet().iterator()
- get()原理:先根据 hash 找到 Node 链,再遍历 Node 链元素根据 K==k || k.equals(K) 查找
- LinkedHashMap
- 父类是 HashMap
- 维护一个有序的输出(按插入顺序)
- Entry{before,next} 继承父类的 HashMap.Node
- 父类调用子类重写的如下方法维护一个 K 的链表
- afterNodeAccess()
- afterNodeInsertion()
- afterNodeRemoval()
- EnumMap
- size 是非 null 的个数
- 有两个数组
- K[] keyUniverse
- Object[] vals
- IdentityHashMap
- 用的是 == 而不是 equals
- Object [] table
- WeakHashMap
- 是 key 被回收
- Entry 继承 WeakReference
plantUml
@startUml
interface Collection
interface List
interface Set
interface SortedSet
interface NavigableSet
abstract class AbstractCollection
abstract class AbstractList
abstract class AbstractSet
abstract class AbstractSequentialList
abstract class EnumSet
Collection <|.. AbstractCollection
Collection <|
AbstractCollection <|
List <|.. AbstractList
AbstractList <|
AbstractList <|
Vector <|
AbstractList <|
AbstractSequentialList <|
Collection <|
Set <|.. AbstractSet
AbstractCollection <|
AbstractSet <|
HashSet <|
Set <|
SortedSet <|
NavigableSet <|.. TreeSet
AbstractSet <|
AbstractSet <|
EnumSet <|
interface Queue
interface Deque
abstract class AbstractQueue
Deque <|.. ArrayDeque
AbstractCollection <|
AbstractQueue <|
Collection <|
Queue <|
Queue <|.. AbstractQueue
AbstractCollection <|
interface Map
interface SortedMap
interface NavigableMap
abstract class Dictionary
abstract class AbstractMap
abstract class Enum
Map <|.. Hashtable
Dictionary <|
Map <|.. AbstractMap
AbstractMap <|
Map <|
SortedMap <|
NavigableMap <|.. TreeMap
AbstractMap <|
HashMap <|
AbstractMap <|
AbstractMap <|
Enum <|
AbstractMap <|
interface Iterator
interface ListIterator
interface PrimitiveIterator
Iterator <|
Iterator <|
@endUml