Map集合的介绍,HashMap添加元素和获取元素的实现原理

本文详细介绍了Map集合的特性,包括它与Collection的关系、键值对的存储方式、key和value的唯一性等。Map接口中的常用方法如put、remove、get等的操作也被解析。此外,重点探讨了put方法的哈希存储机制和get方法的查找过程,帮助读者深入掌握Map的内部工作原理。
摘要由CSDN通过智能技术生成

目录

        Map集合的特点:

        Map接口中常用方法:

        Map.put(k,v)实现原理:

        V = map.get(k)实现原理:


Map集合的特点:

  • 1、Map和Collection没有继承关系。他俩是并列关系
  • 2、Map集合以key和value的方式存储数据:键值对。key和value都是引用数据类型。
  • 3、key和value都是存储对象的内存地址。会封装到HashMap$Node对象中。
  • 4、为了方便程序员遍历,还会创建EntrySet集合,该集合的类型是Entry,Entry是一个接口。Map也实现Entry接口,EntrySet集合只是一个引用,指向了Node对象,因此可以访问key和value。因为 Entry提供了重要的方法    getKey();     getValue();      需要向上向下转型为Map.Entry
  • 5、key起到主导的地位,value是key的一个附属品。
  • 6、Map中的key不允许重复,value可以重复,如果key重复,新的value就会覆盖原来的value
  • 7、Map中得到key可以为null,但只能有一个,value可以有多个
  • 8、key和value之间存在单向一对一关系,即通过制定的key总能找到对应value
  • 9、   Map集合的key,就是一个Set集合。
    • 往Set集合中放数据,实际上放到了Map集合的key部分。
    • Map集合的value,就是一个Collection集合

Map接口中常用方法:

  • V put(K key, V value);  //向Map集合中添加键值对
  • V remove(Object key);   //通过key删除键值对
  • V get(Object key);  //通过key获取value
  • int size();   //获取Map集合中键值对的个数
  • void clear();   //清空Map集合
  • boolean containsKey(Object key);    //判断Map中是否包含某某个key
  • boolean containsValue(Object value);   //判断Map中是否包含某个value
  • boolean isEmpty();   //判断Map集合中元素个数是否是0个
  • Set<K> keySet();   //获取Map集合所有的key(所有的键是一个set集合)
  • Collection<V> values();   // 获取Map集合中所有的value,返回一个Collection
  • Set<Map.Entry<K,V>> entrySet();   // 将Map集合转换成Set集合

Map.put(k,v)实现原理:

  • 1、先将k,v封装到Node对象当中。
  • 2、底层会调用k的hashCode()方法得出hash值,然后通过哈希函数/哈希算法,将hash值转换为数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上了。如果说下标对应的位置上有链表,此时会拿着k和链表上每一个节点中的k进行equals,如果所有的equals方法返回都是false,那么这个新节点将被添加到链表的末尾。如果其中有一个equals返回了true,那么这个节点的value将会被覆盖。

V = map.get(k)实现原理:

  • 先调用k的hashCode()方法得出哈希值,通过哈希算法转换成数组下标,通过数组下标快速定位到某个位置上,如果这个位置上什么也没有,返回null,如果这个位置上有单项链表,那么会拿着参数k和单向链表上的每个节点中的k进行equals,如果所有equals方法返回false,那么get方法返回null,只要其中有一个节点的k和参数k,equals的时候返回true,那么此时这个节点的value就是我们要找的value,get方法最终返回这个要找的value。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小红花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值