Map实现类

Posted juzhuxiaozhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map实现类相关的知识,希望对你有一定的参考价值。


?

一. 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


以上是关于Map实现类的主要内容,如果未能解决你的问题,请参考以下文章

springboot 接口所有实现类map注入

java---Map接口实现类

java中Map有哪些实现类和使用场景

java中的java.util.Map的实现类

Map 实现类之:TreeMap(SortedMap的实现类) 和 Properties(Hashtable的实现类)

Java Map 集合实现类