集合-Map系列

系列文章目录

1.集合-Collection-CSDN博客​​​​​​

2.集合-List集合-CSDN博客

3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客

4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客

5.集合-set系列集合-CSDN博客

6.集合-Map系列-CSDN博客


文章目录

目录

系列文章目录

文章目录

前言

[一 . 什么是Map?](#一 . 什么是Map?)

[二 . HashMap](#二 . HashMap)

[三 . LikedHashMap](#三 . LikedHashMap)

[三 . TreeMap](#三 . TreeMap)

总结


前言

大家好,今天给大家带来的是Map系列的集合,包括HashMap,TreeMap,LikedHashMap相关的内容。


一 . 什么是Map?

Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且K一定是唯一的,不能重复。

在Map中,每个键都是唯一的,而每个键对应一个值。通过键可以快速地查找和获取对应的值。Map提供了一系列的方法来操作键值对,例如put()方法用于插入键值对,get()方法用于获取指定键对应的值,remove()方法用于删除指定键的键值对等。

Map继承体系

Map接口有多个实现类,常用的有HashMap、LinkedHashMap和TreeMap。它们都实现了Map接口,并提供了不同的特性和性能。

  • HashMap 是最常用的Map实现类,它使用哈希表(Hash Table)作为底层数据结构来存储键值对。它的插入、删除和查找操作的平均时间复杂度是O(1),具有较高的性能。
  • LinkedHashMap 是基于HashMap的实现类,它在HashMap的基础上保持了插入顺序或者访问顺序。它通过双向链表来维护键值对的顺序,可以按照插入顺序或者访问顺序进行遍历。
  • TreeMap 是基于红黑树(Red-Black Tree)的实现类,它根据键的自然顺序或者自定义的排序规则来对键值对进行排序。它的插入、删除和查找操作的时间复杂度是O(logN),具有较好的性能。

Map的特点:

  1. 键的唯一性:Map中的每个键都是唯一的,不允许重复的键存在。如果插入了相同的键,则后面的值会覆盖前面的值。

  2. 键值对的存储:Map以键值对的形式存储数据,每个键对应一个值。通过键可以快速地查找和获取对应的值。

  3. 无序性:Map中的键值对是无序的,即插入顺序和存储顺序不一致。如果需要有序的键值对,可以使用LinkedHashMap或TreeMap。

  4. 可以包含null键和null值:Map中可以包含null键和null值。但需要注意的是,HashMap和LinkedHashMap允许有一个null键和多个null值,而TreeMap不允许有null键,但可以有多个null值。

  5. 动态调整大小:Map的实现类会根据需要自动调整内部的存储容量。当键值对的数量超过了一定阈值时,会自动扩容,以保证插入和查找操作的性能。

  6. 高效的查找操作:通过键可以快速地查找对应的值,时间复杂度为O(1)或O(logN)。不同的Map实现类具有不同的查找性能,HashMap具有较高的查找性能。

Map常用方法:

  1. V put(K key, V value):将指定的键值对添加到Map中**(键没有添加,有覆盖)**,并返回之前与该键关联的值(如果存在)。如果之前没有与该键关联的值,则返回null。

  2. V remove(Object key):从Map中删除指定键的映射关系,并返回之前与该键关联的值。如果Map中没有与该键关联的值,则返回null。

  3. boolean containsKey(Object key):判断Map中是否包含指定的键,如果包含则返回true,否则返回false。

  4. boolean containsValue(Object value):判断Map中是否包含指定的值,如果包含则返回true,否则返回false。

  5. int size():返回Map中键值对的数量。

  6. Set<K> keySet():返回包含Map中所有键的Set集合。

  7. Collection<V> values():返回包含Map中所有值的Collection集合。

  8. Set<Map.Entry<K, V>> entrySet():返回包含Map中所有键值对的Set集合。

总的来说,Map是一种存储键值对的数据结构,提供了快速的键查找和值访问的能力。不同的Map实现类具有不同的特性和性能,可以根据具体的需求选择适合的实现类。


二 . HashMap

HashMap是Java中常用的Map实现类之一,它基于哈希表的数据结构来存储键值对。以下是HashMap的特点:

  1. 不重复:HashMap中的每个键都是唯一的,不允许重复的键存在。如果插入了相同的键,则后面的值会覆盖前面的值。

  2. 无序性:HashMap中的键值对是无序的,即插入顺序和存储顺序不一致。如果需要有序的键值对,可以使用LinkedHashMap或TreeMap。

  3. 无索引: hashMap底层是通过哈希表来实现,没有索引结构

entry对象: 键+值 组成的对象

底层会根据待存入元素的键来计算哈希值,找到应存入的位置,如果该位置已经有元素了,则会遍历整个链表(红黑树)调用equals方法比较键的属性值,如果有重复的键则会将该元素覆盖,反之则添加

在jdk8之前老元素会挂在新元素的下面,形成链表

jdk8开始

三 . LikedHashMap

LinkedHashMap是HashMap的一个子类,它在内部使用双向链表来维护键值对的插入顺序。与HashMap不同的是,遍历LinkedHashMap时,键值对的顺序与插入顺序一致。

LinkedHashMap具有以下特点:

  1. 有序性:LinkedHashMap会按照键值对的插入顺序来维护键值对的顺序。即,遍历LinkedHashMap时,键值对的顺序与插入顺序一致。

  2. 不重复:HashMap中的每个键都是唯一的,不允许重复的键存在。如果插入了相同的键,则后面的值会覆盖前面的值。

  3. 无索引

三 . TreeMap

TreeMap是Java中的一个Map实现类,它基于红黑树(Red-Black Tree)数据结构实现。与HashMap和LinkedHashMap不同,TreeMap是有序的,它根据键的自然顺序或者自定义的比较器来维护键值对的顺序。

TreeMap具有以下特点:

  1. 有序性:TreeMap会根据键的自然顺序或者自定义的比较器来维护键值对的顺序。即,遍历TreeMap时,键值对的顺序是有序的。

  2. 不重复:HashMap中的每个键都是唯一的,不允许重复的键存在。如果插入了相同的键,则后面的值会覆盖前面的值。

  3. 无索引

  4. 可排序

TreeMap提供了HashMap中的常用方法,同时还提供了一些额外的方法来支持有序性,如:

  1. TreeMap():构造一个新的空树映射,它根据键的自然顺序进行排序。

  2. TreeMap(Comparator<? super K> comparator):构造一个新的空树映射,它根据指定的比较器进行排序。


总结

这篇博客给大家讲解了Map系列集合的用法和特性以及底层的机制,大家好好理解,我们下一篇博客见。

相关推荐
菜鸡中的奋斗鸡→挣扎鸡3 小时前
滑动窗口 + 算法复习
数据结构·算法
axxy20004 小时前
leetcode之hot100---240搜索二维矩阵II(C++)
数据结构·算法
Uu_05kkq6 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
1nullptr7 小时前
三次翻转实现数组元素的旋转
数据结构
TT哇7 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
A懿轩A8 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
1 9 J9 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
汝即来归9 小时前
选择排序和冒泡排序;MySQL架构
数据结构·算法·排序算法
aaasssdddd9612 小时前
C++的封装(十四):《设计模式》这本书
数据结构·c++·设计模式
芳菲菲其弥章12 小时前
数据结构经典算法总复习(下卷)
数据结构·算法