java.util.HashMap:
table数组中存放的是单向链表Entry,Entry中存放的实际数据,一个链表中可能有多个数据,由这些数据的Key可以算出hashCode得到在table中的相同的“桶位”。hashMap能实现快速定位,就是利用了这一特点。不需要对所有数据进行迭代,利用key的hashCode快速找到“桶位”,然后只在桶位中单向链表中的少量数据中进行迭代,所以速度很快。通过由key生成的hash码,可以找到table数组中对应的单向链表Entry,然后在Entry中找到对应的key,从而取出value。
HashMap中重要的字段:
1. DEFAULT_INITIAL_CAPACITY
默认的table数组大小,如果没有通过构造函数指定则table数组的大小使用此值
2. MAXIMUM_CAPACITY
数组table的最大容量
3. DEFAULT_LOAD_FACTOR
默认的装载因子,如果没有指定则使用此值
4. Entry[] table
存放Entry的数组,以hash码作为下标
5. int size
hashMap的大小
6. int threshold
阈值,hashMap存放内容数量的临界点,当存放量大于这个值的时候,就需要将table进行扩张,新建一个两倍大的数组,并将老的元素移过去。threshold = (int)(capacity * loadFactor)
7. float loadFactor
装载因子,实际存放量/capacity容量的比值
8. int modCount
记录hashMap结构变化的次数,使用在hashMap的fail-fast机制中(当某个线程获取map的游标后,另一个线程对map做了结构修改的操作,那么原先准备遍历的线程会抛出ConcurrentModificationException异常)
HashMap的构造函数:
1. HashMap(int initialCapacity, float loadFactor)
使用指定的初始容量,和装载因子构造hashMap。如果initialCapacity<0或loadFactor<=0或loadFactor是非法的浮点类型时抛出IllegalArgumentException异常。当initialCapacity> MAXIMUM_CAPACITY时初始容量等于MAXIMUM_CAPACITY。hashMap的容量必须是2的倍数,所以实际的初始容量会可能会大于initialCapacity。
2. HashMap(int initialCapacity)
使用指定的初始容量,装载因子为DEFAULT_LOAD_FACTOR。
3. HashMap()
初始容量和装载因子均为默认值
4. HashMap(Map<? extends K, ? extends V> m)
从现有的map构造新的hashMap。
table数组中存放的是单向链表Entry,Entry中存放的实际数据,一个链表中可能有多个数据,由这些数据的Key可以算出hashCode得到在table中的相同的“桶位”。hashMap能实现快速定位,就是利用了这一特点。不需要对所有数据进行迭代,利用key的hashCode快速找到“桶位”,然后只在桶位中单向链表中的少量数据中进行迭代,所以速度很快。通过由key生成的hash码,可以找到table数组中对应的单向链表Entry,然后在Entry中找到对应的key,从而取出value。
HashMap中重要的字段:
1. DEFAULT_INITIAL_CAPACITY
默认的table数组大小,如果没有通过构造函数指定则table数组的大小使用此值
2. MAXIMUM_CAPACITY
数组table的最大容量
3. DEFAULT_LOAD_FACTOR
默认的装载因子,如果没有指定则使用此值
4. Entry[] table
存放Entry的数组,以hash码作为下标
5. int size
hashMap的大小
6. int threshold
阈值,hashMap存放内容数量的临界点,当存放量大于这个值的时候,就需要将table进行扩张,新建一个两倍大的数组,并将老的元素移过去。threshold = (int)(capacity * loadFactor)
7. float loadFactor
装载因子,实际存放量/capacity容量的比值
8. int modCount
记录hashMap结构变化的次数,使用在hashMap的fail-fast机制中(当某个线程获取map的游标后,另一个线程对map做了结构修改的操作,那么原先准备遍历的线程会抛出ConcurrentModificationException异常)
HashMap的构造函数:
1. HashMap(int initialCapacity, float loadFactor)
使用指定的初始容量,和装载因子构造hashMap。如果initialCapacity<0或loadFactor<=0或loadFactor是非法的浮点类型时抛出IllegalArgumentException异常。当initialCapacity> MAXIMUM_CAPACITY时初始容量等于MAXIMUM_CAPACITY。hashMap的容量必须是2的倍数,所以实际的初始容量会可能会大于initialCapacity。
2. HashMap(int initialCapacity)
使用指定的初始容量,装载因子为DEFAULT_LOAD_FACTOR。
3. HashMap()
初始容量和装载因子均为默认值
4. HashMap(Map<? extends K, ? extends V> m)
从现有的map构造新的hashMap。