你的位置:首页 > 软件开发 > Java > HashMap 源码解析

HashMap 源码解析

发布时间:2016-04-02 16:00:05
HashMap简介:  HashMap在日常的开发中应用的非常之广泛,它是基于Hash表,实现了Map接口,以键值对(key-value)形式进行数据存储,HashMap在数据结构上使用的是数组+链表。允许null键和null值,不保证键值对的顺序。HashMap检索数据的大致流 ...

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源码分析:

  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 (#换成@)。

可能感兴趣文章

我的浏览记录