Java集合之HashMap

302 阅读1分钟

Java集合之HashMap

一、Map集合的特点

  1. Map集合是一个双列集合,集合中的一个元素包含两个值,一个Key,一个Value ;(类似于Python中的字典)
  2. Map集合中的元素,Key和Value的数据类型可以相同,有可以不同;
  3. Map集合中的元素的Key是不允许重复的,Value是可以重复的;
  4. Map集合中的元素Key和Value一一对应

二、HashMap特点

  1. HashMap<K,V> implements Map<K,V>接口
  2. HashMap集合底层为哈希表;
    1. 在JDK1.7之前是数组+单向链表
    2. 在JDk1.8之后是数组+单向链表/红黑树(当链表长度达到6时会变化为红黑树)
  3. HashMap集合是一个无序的集合,这里的无序表示元素的存储顺序和取出顺序可能存在不一致;
  4. HashMap要保证Key是唯一的,因此作为Key的元素,必须要重写hashCode()方法和equals()方法,以保证Key的唯一性;

三、HashMap源码

  1. HashMap 的 put()方法源码
    1. put(key,value)->计算出key的hash值->返回putVal(hash,key,value)方法
      public V put(K key, V value) {
           return putVal(hash(key), key, value, false, true);
      } 
    
    1. putVal(hash,key,value)内部->对tab节点数组和长度n进行判断: 如果为0->调用resize方法对长度n进行扩容,第一次扩容的大小时16;
      if ((tab = table) == null || (n = tab.length) == 0)
          n = (tab = resize()).length;
      
    ...未完待续