重要的参数
- static final int DEFAULT_INITIAL_CAPACITY = 1 << 4 ,默认的初始容量
- static final int MAXIMUM_CAPACITY = 1 << 30 ,最大容量
- static final float DEFAULT_LOAD_FACTOR = 0.75f 默认的装载因子
- static final int TREEIFY_THRESHOLD = 8 在链长度达到这个长度时转换为树结构
- static final int UNTREEIFY_THRESHOLD = 6 当长度达到这个长度,会从树转换成链
- static final int MIN_TREEIFY_CAPACITY = 64; 想要转换成树的话,table的最小容量
field
- Node<K,V>[] table;
- Set<Map.Entry<K,V>> entrySet;
- int size;
- int modCount; 记录table的修改次数,保证iterators可以快速失败,see ConcurrentModificationException
- int threshold 下次扩容的size
- float loadFactor; 装载因子
内部类
Node 基础的node元素
1
2
3
4
5
6static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
}KeySet
1
final class KeySet extends AbstractSet<K> {}
Values
1
final class Values extends AbstractCollection<V> {}
EntrySet
1
final class EntrySet extends AbstractSet<Map.Entry<K,V>> {}
HashIterator
1
2
3
4
5
6abstract class HashIterator{
Node<K,V> next; // next entry to return
Node<K,V> current; // current entry
int expectedModCount; // for fast-fail
int index; // current slot
}KeyIterator
1
2final class KeyIterator extends HashIterator
implements Iterator<K>ValueIterator
1
2final class ValueIterator extends HashIterator
implements Iterator<V>EntryIterator
1
2final class EntryIterator extends HashIterator
implements Iterator<Map.Entry<K,V>>KeySpliterator
ValueSpliterator
EntrySpliterator
TreeNode
主要行为
put
1 | final V putVal(int hash, K key, V value, boolean onlyIfAbsent, |
未完。。。