【Java】Java容器类(四),深入理解Map集合类

【Java】Java容器类(四),深入理解Map集合类

建议整个系列一起看(更新中):
增强for: https://blog.csdn.net/qq_45495857/article/details/109410980
泛型:https://blog.csdn.net/qq_45495857/article/details/109410912
Java容器篇(一),宏观了解:https://blog.csdn.net/qq_45495857/article/details/109524162
Java容器篇(二),深入理解List集合类: https://blog.csdn.net/qq_45495857/article/details/109529618
Java容器类(三),深入理解Set集合类: https://blog.csdn.net/qq_45495857/article/details/109536611
Java容器类(四),深入理解Map集合类https://blog.csdn.net/qq_45495857/article/details/109542428
Java容器类(五),深入理解迭代器: https://blog.csdn.net/qq_45495857/article/details/109548598

在这里插入图片描述

Map接口

特点:

  • 是双列集合的 顶层,和Collection属于同级
  • 存储方式是key-value(键值对)方式,即一个键对应一个值
  • 一个键只能映射一个值
  • 键不能重复,值可以重复
  • 键是无序的

Map和Collection的区别:

  • Map是双列集合,用于处理有一一对应关系的数据,键不能重复且键无序
  • Collection是单列集合,有不同的子体系,List允许重复且有序,Set允许不 重复且无序

HashMap

HashMap基于散列表的实现(它取代了HashTable)
插入和查询“键值对”的开销是固定的。
可以通过构造器设置容量和负载因子,以调整容器的性能

HashMap的性能因子:

  • 容器:表中的桶位数
  • 初始容量:表在创建时所拥有的桶位数。HashMap和HashSet都具有允许你指定初始容量的构造器
  • 尺寸:表中当前存储的项数
  • 负载因子:尺寸/容量,空表的负载因子是0而半满表 的负载因子是0.5,以此类推,负载轻的表产生冲突的可能性小 ,因此对于插入和查找都是最理想的(但是会减慢使用迭代器进行遍历的过程),HashMap和HashSet都具有允许你指定负载因子的构造器,表示当负载情况达到该负载因子的水平时,容器将自动增加其容量(桶位数),实现方式是使容量大致加倍,并重新将现有对象分布到新的通位集中(这被称为再散列)

HashMap使用的默认负载因子是0.75(只有当表达到四分之三满时,才进行再散列)

如果你知道将要在HashMap中存储多少项,那么创建一个具有恰当大小的初始容器可以避免自动再散列的开销

JDK8中,HashMap在存储一个元素时,当对应链表长度大于8时,链表就转换为红黑树,这样又大大提高了查找的效率。

常用方法:

  • 增和改:
    V put(K key,V value):添加键值对,如果key已经存在,则会使用新的value覆盖原有的value,并将原有value返回


  • void clear():清空集合
    V remove(Object key):删除指定键的值(key和 value都会删除)


  • V get(Object key):通过指定键获取值
    int size():获取集合长度

  • 判断
    boolean containsKey(Object key);是否包含指定的键
    boolean containsValue(Object value):是否包含指定的值
    boolean isEmpty():是否为空

  • 遍历
    Set<Map.Entry<K,V> > enrty 获取键值对的Set集合
    Set<K> keySet(): 获取所有键的Set集合
    Collection<V> values():获取所有值得Collection集合

TreeMap

基于红黑树的实现。查看 “键” 或 “键值对”时,他们会被排序(次序由 Comparable 或 Comparator决定)。TreeMap的特点在于:所得到的结果是经过排序的,TreeMap是唯一的带有SubMap()方法的Map,它可以返回一个子树

对象排序的方法在前面一掌Set集合TreeSet的讲解中已经提出,本篇不再重复讲解,有不懂的小伙伴可以去看一下

特有方法:

  • Comparator comparator():返回当前Map使用的Comparator;或者返回null,表示以自然方式排序
  • T firstKey()返回Map中的第一键。
  • T lastKey()返回Map中最后一个键
  • SortedMap subMap(fromKey,toKey)生成此Map的子集,范围由fromKey(包含)到toKey(不包含)的键确定
  • SortedMap headMap(toKey)生成此 Map的子集,由键小于toKey的所有键值对组成。
  • SortedMap tailMap(fromKey) 生成此Map的子集,由键大于或等于fromKey的所有键值对组成

其他不常用Map集合类,将不再讲解,类似集合请看前几篇 讲解。


//以上就是本篇Map集合类的讲解,希望能够帮助到大家👍

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GengMS_DEV

你的鼓励就是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值