Java集合之HashMap
一、Map集合的特点
- Map集合是一个双列集合,集合中的一个元素包含两个值,一个Key,一个Value ;(类似于Python中的字典)
- Map集合中的元素,Key和Value的数据类型可以相同,有可以不同;
- Map集合中的元素的Key是不允许重复的,Value是可以重复的;
- Map集合中的元素Key和Value一一对应
二、HashMap特点
- HashMap<K,V> implements Map<K,V>接口
- HashMap集合底层为哈希表;
- 在JDK1.7之前是数组+单向链表
- 在JDk1.8之后是数组+单向链表/红黑树(当链表长度达到6时会变化为红黑树)
- HashMap集合是一个无序的集合,这里的无序表示元素的存储顺序和取出顺序可能存在不一致;
- HashMap要保证Key是唯一的,因此作为Key的元素,必须要重写hashCode()方法和equals()方法,以保证Key的唯一性;
三、HashMap源码
- HashMap 的 put()方法源码
- put(key,value)->计算出key的hash值->返回putVal(hash,key,value)方法
public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }- putVal(hash,key,value)内部->对tab节点数组和长度n进行判断:
如果为0->调用resize方法对长度n进行扩容,第一次扩容的大小时16;
if ((tab = table) == null || (n = tab.length) == 0) n = (tab = resize()).length;