码迷,mamicode.com
首页 > 其他好文 > 详细

Map实现类

时间:2020-07-04 20:59:50      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:tor   扩容   一个   log   current   container   cto   poi   效率   


?

一. 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实现类

标签:tor   扩容   一个   log   current   container   cto   poi   效率   

原文地址:https://www.cnblogs.com/juzhuxiaozhu/p/13236175.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!