一、Hashmap的简介概况
1.Hash简介
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”,容量 是哈希表中桶的数量,初始容量 只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度,通常,默认加载因子是 0.75。
2.HashMap的构造函数
一共有四个构造函数
// 默认构造函数。
HashMap()
// 指定“容量大小”的构造函数
HashMap(int capacity)
// 指定“容量大小”和“加载因子”的构造函数
HashMap(int capacity, float loadFactor)
// 包含“子Map”的构造函数
HashMap(Map<? extends K, ? extends V> map)
3.Hashmap的API
void clear() //清空HashMap Object clone() //克隆一个HashMap对象并返回 boolean containsKey(Object key) //判断HashMap是否包含key。 boolean containsValue(Object value) //判断HashMap是否包含“值为value”的元素。 Set<Entry<K, V>> entrySet() //返回“HashMap中所有Entry的集合”,它是一个集合 V get(Object key) //获取key对应的value boolean isEmpty() Set<K> keySet() V put(K key, V value) //对外提供接口,让HashMap对象可以通过put()将“key-value”添加到HashMap中 void putAll(Map<? extends K, ? extends V> map) //将"m"的全部元素都添加到HashMap中 V remove(Object key) //删除“键为key”元素 int size() Collection<V> values()
二、HashMap的数据结构
HashMap与Map关系如下图:
从图中可以看出:
(01) HashMap继承于AbstractMap类,实现了Map接口。Map是"key-value键值对"接口,AbstractMap实现了"键值对"的通用函数接口。
(02) HashMap是通过"拉链法"实现的哈希表。它包括几个重要的成员变量:table, size, threshold, loadFactor, modCount。
table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。
size是HashMap的大小,它是HashMap保存的键值对的数量。
threshold是HashMap的阈值,用于判断是否需要调整HashMap的容量。threshold的值="容量*加载因子",当HashMap中存储数据的数量达到threshold时,就需要将HashMap的容量加倍。
loadFactor就是加载因子。
modCount是用来实现fail-fast机制的。