【数据结构】之 Map和Set

本文详细介绍了Java中的Map和Set数据结构,包括它们的概念、场景、实例化类的区别,以及Map.Entry的工作原理。还探讨了哈希表的概念、冲突避免策略(如设计合理的哈希函数和负载因子调节)和冲突解决方法(开散列)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🏀🏀🏀来都来了,不妨点个关注!
🎧🎧🎧博客主页:欢迎各位大佬!
在这里插入图片描述

1. Map和Set的相关概念及说明

1.1概念及场景

Map和Set是一种专门用来进行搜索和去重操作的容器或数据结构,其搜索效率与其具体实例化的子类有关。 在以前的学习中,我们常见的搜索方式有:

  1. 直接遍历:时间复杂度:O(N),但当数据量巨大的时候,比如一百万个数据,且我们要搜索的效率在最后面的时候,搜索效率就会变的十分低。
  2. 二分查找:时间复杂度:O(logN),但它有个前提是,数据是可排序的并且数据已经是有序的。

上述排序比较适合静态的查找,即一般不会对数据进行插入删除操作了,而现实中的很多查找如下:
1.根据姓名查询成绩
2.根据身份证号查询信息

上述可能在查询的过程中会进行插入或删除操作,即动态查找,上述的方法就不适合了,而本文介绍Map和Set则是一种适合动态查找的容器。

1.2 模型

一般我们把要搜索的数据叫做关键字(Key),而关键字对应的称为值(Value),将之称为Key-Value的键值对,所以就有下如下两种模型:
1.纯Key模型:
例如英语词典,我们查找某个单词就只搜索这个关键字。一般纯Key模型也可以用来进行去重操作。
2.Key-Value模型:
例如我和女朋友经常使用学习软件里的自习室进行学习时长的记录,里面记录的值就是Key-Value模型,(我,5h),(女朋友,6.5h)。一般Key-Value模型可以用来统计某个数据出现的次数。

Map中存储的就是key-value的键值对,Set中只存储了Key。

2. Map的相关说明

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

2.1 Map相关方法的介绍

在这里插入图片描述

通过上面这张图我们可以看出,Map的两个实例化类分别是HashMap和TreeMap
HashMap和TreeMap的区别:
在这里插入图片描述

在Java中HashMap的底层是实现了一个哈希桶,本文的后面会详细介绍;而TreeMap的底层是红黑树,而红黑树是一棵近似平衡的二叉搜索树,即在二叉搜索树的基础之上 +颜色以及红黑树性质验证,关于红黑树的性质我们之后再做详解。这里我们对二叉搜索树有大致理解即可,可以翻看我之前的二叉搜索树章节进行理解。

下面我们对Map的一些常用方法进行举例:
在这里插入图片描述
代码实现:(这里只介绍几种)

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Test {
   
    public static void main(String[] args) {
   
        Map<String,String> map = new TreeMap<>();
        map.put("卡莎
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值