集合-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系列集合的用法和特性以及底层的机制,大家好好理解,我们下一篇博客见。

相关推荐
眰恦37418 分钟前
数据结构--第六章图
数据结构·算法
sjsjs1134 分钟前
【数据结构-差分】力扣1589. 所有排列中的最大和
数据结构·算法·leetcode
独領风萧36 分钟前
数据结构之二叉树(1)
数据结构
敲上瘾1 小时前
多态的使用和原理(c++详解)
开发语言·数据结构·c++·单片机·aigc·多态·模拟
Gabriel Drop Out1 小时前
11年计算机考研408-数据结构
数据结构
问道飞鱼2 小时前
每日学习一个数据结构-哈夫曼树Huffman Tree
数据结构·学习·霍夫曼树
西柚与蓝莓2 小时前
922. 按奇偶排序数组 II 双指针 力扣
数据结构·算法·leetcode
宇柔2 小时前
Day5:移除链表元素
数据结构·算法·链表
SpongeG6 小时前
数据结构第三周做题总结_链表
数据结构·算法·链表
小珑也要变强6 小时前
队列基础概念
c语言·开发语言·数据结构·物联网