1.2:
ArrayList:默认构造方法初始数组10个长度,扩容:(数组的长度 * 3)/2 + 1,元素满了以后扩容
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, size);
Vector:默认构造方法初始数组10个长度,扩容:(数组的长度*2),元素满了以后扩容
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, elementCount);
HashMap:默认构造方法数组[101]个长度,加载因子:0.75可以存null键值,put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度:最新数组长度*0.75因子
数组长度:(数组长度*2+1)
Entry newMap[] = new Entry[newCapacity];
Hashtable:默认构造方法数组[101]个长度,加载因子:0.75,不能存null值。put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度:最新数组长度*0.75因子
数组长度:数组长度* 2 + 1
Entry newMap[] = new Entry[newCapacity];
LinkedList:调用add方法是前插,允许存null值
HashSet:底层是一个HashMap实现,它的值使用了一个静态的Object对象。
TreeSet:底层是一个TreeMap实现,它的值使用了一个静态的Object对象。
1.3:
ArrayList:默认构造方法初始数组10个长度,扩容:(数组的长度 * 3)/2 + 1,元素满了以后扩容
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, size);
Vector:默认构造方法初始数组10个长度,扩容:(数组的长度*2)
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, elementCount);
HashMap:默认构造方法数组11个长度,加载因子:0.75,如果你存null键会给你一个Object对象,put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度:最新数组长度 * 0.75 因子
数组长度:数组长度 * 2 + 1
Entry newMap[] = new Entry[newCapacity];
Hashtable:默认构造方法数组11个长度,加载因子:0.75,不能存null值。put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码
尺度:最新数组长度 * 0.75因子
数组长度:数组长度 * 2 + 1 倍数1倍
Entry newMap[] = new Entry[newCapacity];
LinkedList:调用add方法是前插,允许存null值
HashSet:底层是一个HashMap实现,它的值使用了一个静态的Object对象。
TreeSet:底层是一个TreeMap实现,它的值使用了一个静态的Object对象。
1.4:
ArrayList:默认构造方法初始数组10个长度,扩容:(数组的长度 * 3)/2 + 1,元素满了以后扩容
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, size);
Vector:默认构造方法初始数组10个长度,扩容:(数组的长度*2)
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, elementCount);
HashMap:默认构造方法数组16个长度,加载因子:0.75,如果你存null键会给你一个Object对象,put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度: 最新数组长度 * 0.75因子
数组长度:数组长度 * 2
Entry[] newTable = new Entry[newCapacity];
Hashtable:默认构造方法数组11个长度,加载因子:0.75,不能存null值。put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度:最新数组长度 * 0.75 因子
数组长度:数组长度 * 2 + 1 倍数1倍
Entry newMap[] = new Entry[newCapacity];
LinkedList:调用add方法是前插,允许存null值
HashSet:底层是一个HashMap实现,它的值使用了一个静态的Object对象。
TreeSet:底层是一个TreeMap实现,它的值使用了一个静态的Object对象。
1.5:
ArrayList:默认构造方法初始数组10个长度,扩容:(数组的长度 * 3)/2 + 1,元素满了以后扩容
封装了一个E[] elementData泛型数组
elementData = (E[])new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, size);
Vector:默认构造方法初始数组10个长度,扩容:(数组的长度*2)
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, elementCount);
HashMap:默认构造方法数组16个长度,加载因子:0.75,put方法是前插
Entry数组
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度: 最新数组长度 * 0.75因子
数组长度:数组长度 * 2
Entry[] newTable = new Entry[newCapacity];
Hashtable:默认构造方法数组11个长度,加载因子:0.75,不能存null值。put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度:最新数组长度*0.75因子
数组长度:数组长度 * 2 + 1
Entry[] newTable = new Entry[newCapacity];
LinkedList:调用add方法是前插,允许存null值
HashSet:底层是一个HashMap实现,它的值使用了一个静态的Object对象。
TreeSet:底层是一个TreeMap实现,它的值使用了一个静态的Object对象。
1.6:
ArrayList:默认构造方法初始数组10个长度,扩容:(数组的长度 * 3)/2 + 1,元素满了以后扩容
elementData = Arrays.copyOf(elementData, newCapacity);
Vector:默认构造方法初始数组10个长度,扩容:(数组的长度*2)
elementData = Arrays.copyOf(elementData, newCapacity);
HashMap:默认构造方法数组16个长度,加载因子:0.75,put方法是前插
Entry数组
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度: 最新数组长度*0.75因子
数组长度:数组长度 * 2
Entry[] newTable = new Entry[newCapacity];
Hashtable:默认构造方法数组11个长度,加载因子:0.75,不能存null值。put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度:最新数组长度 *0.75因子
数组长度:数组长度 * 2 + 1
Entry[] newMap = new Entry[newCapacity];
LinkedList:调用add方法是前插,允许存null值
HashSet:底层是一个HashMap实现,它的值使用了一个静态的Object对象。
TreeSet:底层是一个TreeMap实现,它的值使用了一个静态的Object对象。
1.7:
ArrayList:默认构造方法初始数组10个长度,扩容:old数组长度 + (old数组长度 >> 1),元素满了以后扩容
elementData = Arrays.copyOf(elementData, newCapacity);
Vector:默认构造方法初始数组10个长度,扩容:(数组的长度+数组的长度)
elementData = Arrays.copyOf(elementData, newCapacity);
HashMap:默认构造方法数组16个长度,加载因子:0.75,put方法是前插
扩容:容量达到尺度但是当前存储的元素的下标的链表头为空也不会扩容||。
尺度: 最新数组长度 * 0.75因子
数组长度:数组长度*2
Entry<K,V>[] newMap = new Entry[newCapacity];
Hashtable:默认构造方法数组11个长度,加载因子:0.75,不能存null值。put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度:最新数组长度 * 0.75因子
数组长度:数组长度 * 2 + 1
Entry<K,V>[] newMap = new Entry[newCapacity];
LinkedList:调用add方法是前插,允许存null值
HashSet:底层是一个HashMap实现,它的值使用了一个静态的Object对象。
TreeSet:底层是一个TreeMap实现,它的值使用了一个静态的Object对象。
1.8:
ArrayList:默认构造方法初始数组0个长度,扩容:数组长度 * 1.5 ,添加第一个元素才扩充容量为(10) 元素满了以后扩容
elementData = Arrays.copyOf(elementData, newCapacity);
Vector:默认构造方法初始数组10个长度,扩容:(数组的长度 + 数组的长度)
elementData = Arrays.copyOf(elementData, newCapacity);
HashMap:
调用默认初始化:初始了一个0.75加载因子,数组还是0个长度 ,添加第一个元素才扩充容量为(16)put后插
扩容:如果hash表元素没有达到尺度但是某个桶的数量超过8个也会自动扩容,
一个桶超过了八个元素且数组的长度超过了64:会将这个桶变为树结构(红黑树)。
尺度:数组的长度
hash表的扩容:数组是数组长度 * 2,
尺度:本身的尺度 * 2
Node<K,V>[] newTab = (Node<K,V>[])new Node[newCap];
Hashtable: 默认构造方法数组11个长度,加载因子:0.75,不能存null值。put方法是前插
扩容:元素个数达到尺度就扩容,扩容重新计算每个元素的的hash码。
尺度:数组的长度
hash表的扩容:数组是数组长度 * 2 + 1,
尺度:new新数组的长度 * 0.75
Entry<K,V> e = (Entry<K,V>) tab[index];
LinkedList:调用add方法是前插,允许存null值
HashSet:底层是一个HashMap实现,它的值使用了一个静态的Object对象。
TreeSet:底层是一个TreeMap实现,它的值使用了一个静态的Object对象。