Map实现类

Java集合系列

 

一. HashMap


  1. 数据结构:数组+链表

  2. 特点:

    1. null可以作为值和键,但是键只允许一个null,而值可以有多个null元素。
    2. 键不能重复
    3. 无法保证元素的存入顺序
  3. 构造方法:

    1. HashMap()

      构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。16*0.75=12

    2. HashMap(int initialCapacity)

      构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。

    3. HashMap(int initialCapacity, float loadFactor)

      构造一个带指定初始容量和加载因子的空 HashMap。

  4. 注意:

    1. 翻倍扩容,扩容后可能会出现rehash
    2. 1.8之后,当链表的长度超过8时,将HashMap底层结构转为红黑树的结构。当链表的长度小于6时,再从红黑树的结构转回来

 

二. Hashtable


从JDK1.2开始,才让Hashtable作为Map的实现类

  1. 特点:

    1. 任何非 null 对象都可以用作键或值,对于null的键和值,HashTable会抛出空指针异常。(有别于HashMap)
  2. 构造方法:

    1. Hashtable()

      用默认的初始容量 (11) 和加载因子 (0.75) 构造一个新的空哈希表

  3. HashMap和Hashtable的区别:

    1. HashMap允许键存在一个null,值允许有多个null,而对于Hashtable来说,键值都不允许为null,否则运行会抛出空指针异常;
    2. 默认大小,HashMap为16,Hashtable为11
    3. HashMap线程不安全的,效率高;Hashtable线程安全的,效率低。

 

三. LinkedHashMap


是HashMap的子类,可以确保元素存储的顺序;底层其实是维护了一个双重链表;

  1. 构造方法:

    1. LinkedHashMap()

      构造一个带默认初始容量 (16) 和加载因子 (0.75) 的空插入顺序 LinkedHashMap 实例。

  2. 注意:

    1. 如果再使用map时,需要保证元素放入的顺序,这时可以使用LinkedHashMap,但效率低于HashMap。

四.👉 ConcurrentMap

posted @ 2020-07-04 19:10  仰观云  阅读(209)  评论(0编辑  收藏  举报
Live2D