Map的实现:

  • HashMap:依赖hashCode()equals()排序的Map;
  • LinkedHashMap:解决HashMap存取顺序不能保存一致的问题。

    Map提供的方法:

    🐵 #面试 #AnS

  • map.keySet():返回一个包含键(key)的集合,可以提供遍历这个集合获得key;

  • map.put(key ,value)
  • map.get(key):返回key对应的value;

HashMap:

HashMap的特点:
  • 存储数据采用的哈希表结构,所以,元素的存取顺序不能保证一致
  • 键(key)唯一、不重复;
  • 线程不安全。

    HashMapput过程:
    1. 首次扩容(数组初始为16);
    2. 计算索引,通过hashCode确定位置;
    3. 插入数据:
      • 如果当前位置元素为空,则直接插入;
      • 如果当前位置元素不为空,且key已经存在,则覆盖其value;
      • 如果当前位置 元素不为空,且 key不存在,那么将新元素链接到当前位置的链表末端(拉链法解决冲突);
      • 若链表长度达到8,则将 链表 转换成 红黑树,并将数据插入树中;
        HashMap的底层实现:
  • Jdk8:散列数组-拉链法-红黑树(链表长度大于8时)