HashMap简介: HashMap在日常的开发中应用的非常之广泛,它是基于Hash表,实现了Map接口,以键值对(key-value)形式进行数据存储,HashMap在数据结构上使用的是数组+链表。允许null键和null值,不保证键值对的顺序。HashMap检索数据的大致流 ...
HashMap简介:
HashMap在日常的开发中应用的非常之广泛,它是基于Hash表,实现了Map接口,以键值对(key-value)形式进行数据存储,HashMap在数据结构上使用的是数组+链表。允许null键和null值,不保证键值对的顺序。
HashMap检索数据的大致流程:
当我们使用HashMap搜索key所对应的value时,HashMap会根据Hash算法对key进行计算,得到一个key的hash值,再根据hash值算出该key在数组中存储的位置index,然后获取数组在index位置的键值对e,再使用链表对e进行遍历,查找遍历的元素是否和给定的key相符合,若有符合的,则返回其value值。
自己手动画了一个HashMap的数据结构图:
HashMap源码分析:
HashMap是存储键值对的集合,实现了Map接口,下面我们看一下Map接口的定义:
/***映射key到value的顶级接口,不能包含重复的key,一个key最多可以映射到一个value,键和值均可为null*/public interface Map<K,V> { //返回该map包含的键值对的个数,如果键值对的个数超过了Integer.MAX_VALUE,则返会Integer.MAX_VALUE int size(); //如果该Map没有包含键值对,则返回true,否则返回false boolean isEmpty(); //判断该map是否包含指定的key所对应的键值对,key可以为null boolean containsKey(Object key); //判断该map是否包含指定的value所对应的键值对,若map中包含有一个及以上的key,对应指定的value,则返回true,value可以为null boolean containsValue(Object value); //返回指定的key所对应的value,若key不存在,则返回null;但是返回null的key,不代表key在map中不存在,有可能是key所对应的value为null V get(Object key); //将指定的key和value映射为一个键值对,放入map中;若之前该map中包含了指定的Key,则该key所对应的老的值oldValue将会被替换为value V put(K key, V value); //删除指定的key所对应的键值对,并返回该key对应的value V remove(Object key); //将指定的map中的键值对复制到当前map中 void putAll(Map<? extends K, ? extends V> m); //清除map中所有的键值对,该操作完成后,该map就是空的了 void clear(); //将map中所有的key返回,由于map中的key是不能重复的,所以用Set集合的方式装载所有的key Set<K> keySet(); //将map中所有的value返回,由于map中的value是可重复的,所以用Collection集合的方式装载所有的value Collection<V> values(); //将map中所有的键值对Entry返回,由于map中的键值对是不可重复的(key不可重复),所以用Set集合的方式装载所有的value Set<Map.Entry<K, V>> entrySet(); //Map中承载键值对的数据结构Entry interface Entry<K,V> { //返回键值对的键值key K getKey(); //返回键值对的value值 V getValue(); //将当前键值对的value值 替换为指定的value值 V setValue(V value); //判断指定的对象和当前键值对是否equals相等,若相等,则代表是同一个键值对; boolean equals(Object o); //返回当前键值对的hashCode值 int hashCode(); } //判断指定对象和当前Map的equals是否相等 boolean equals(Object o); //返回当前Map的hashCode int hashCode();}
原标题:HashMap 源码解析
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。