Map和HashMap

在项目中有一句这样的代码:

Map<String, Object> mapData = new HashMap<>();

不太理解是什么意思,上网浏览解决完后总结一下。

Map接口

java.util中的集合类包含Java中某些最常用的类。最常用的集合类是List和Map。

Map是一种 键-值对(key-value) 集合,Map集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。

Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。

方法名称说明
V get(Object key)返回 Map 集合中指定键对象所对应的值。V 表示值的数据类型
V put(K key, V value)向 Map 集合中添加键-值对,返回 key 以前对应的 value,如果没有, 则返回 null
V remove(Object key)从 Map 集合中删除 key 对应的键-值对,返回 key 对应的 value,如果没有,则返回null
Set entrySet()返回 Map 集合中所有键-值对的 Set 集合,此 Set 集合中元素的数据类型为 Map.Entry
Set keySet()返回 Map 集合中所有键对象的 Set 集合

在Map类设计时,提供了一个嵌套接口:Entry。Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
Map接口

HashMap类

  • HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现
  • HashMap中的Entry对象是无序排列的
  • Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射(key不可重复)

Map和HashMap的关系图如下所示:
Map和HashMap的关系
从图中可以看出:

  1. HashMap继承于AbstractMap类,实现了Map接口。Map是"key-value键值对"接口,AbstractMap实现了"键值对"的通用函数接口。
  2. HashMap是通过"拉链法"实现的哈希表。它包括几个重要的成员变量:table, size, threshold, loadFactor, modCount。
    (1) table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。
    (2) size是HashMap的大小,它是HashMap保存的键值对的数量。
    (3) threshold是HashMap的阈值,用于判断是否需要调整HashMap的容量。threshold的值=“容量*加载因子”,当HashMap中存储数据的数量达到threshold时,就需要将HashMap的容量加倍。
    (4) loadFactor就是加载因子。
    (5) modCount是用来实现fail-fast机制的。

总结

  1. Map是一个接口,HashMap继承AbstractMap接口和实现了Map接口的类;
  2. Map是存储键和值这样的双列数据集合,但存储的数据是没有顺序的,其键不能重复,但其值是可以重复的,可以通过每一个键找到每一个对应的值;HashMap是线程不同步的,即线程不安全的,只有一个线程访问时效率较高。

两者功能相同,不过一般在项目中,HashMap用的比较多些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值