1、HashMap是一个散列表,它存储的内容是键值对(key-value)的形式
查看源码就可以看到HashMap是在继承一个AbstractMap
实现了Map,Cloneable,Serializable接口
HashMap的实现是线程不同步的,这就意味着它是线程不安全的,它的key以及value都可以是null,以及HashMap中的映射不是有序的。
HashMap的实例有两个参数影响性能, “初始容量”和“加载因子”,容量是哈希表中桶的数量,初始量只是哈希表在创建的容量。通常默认的加载因子是0.75,这是在时间和空间成本上寻求一种折衷,加载因子过高虽然减少了空间开销,但同时也增加了查询成本(在大多数 HashMap 类的操作中,包括 get 和 put 操作,都反映了这一点)。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少 rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生 rehash 操作。
加载因子:加载因子是表示Hsah表中元素的填满的程度.若:加载因子越大,填满的元素越多,好处是,空间利用率高了,但:冲突的机会加大了.反之,加载因子越小,填满的元素越少,好处是:冲突的机会减小了,但:空间浪费多了.
冲突的机会越大,则查找的成本越高.反之,查找的成本越小.因而,查找时间就越小.
因此,必须在 "冲突的机会"与"空间利用率"之间寻找一种平衡与折衷. 这种平衡与折衷本质上是数据结构中有名的"时-空"矛盾的平衡与折衷.
// 默认构造函数。
HashMap()
// 指定“容量大小”的构造函数
HashMap(int capacity)
// 指定“容量大小”和“加载因子”的构造函数
HashMap(int capacity, float loadFactor)
// 包含“子Map”的构造函数
HashMap(Map<? extends K, ? extends V> map)