Map和Set基础

目录

一、导论

二、Map

三、Set


本文找先不涉及两种数据结构的底层,目标是:

理解Map和Set的大体框架,了解他们有什么用,用在哪里的然后再从浅层深入底层。

小编认为:

先了解也下Map和Set大体是用来做什么,如何用,用在那,是首先应该学的。

对底层的掌握固然重要,但实际上掌握底层的最终目的不就是为了让我们更好的运用这种数据结构吗?如果直接深入底层,可能啃到最后,还不直到Map和Set到底是个什么东西。

仅限小编个人观点。😘


本文找涉及的概念相对较多,大家忍忍,忍一下,就好咯。


一、导论

Map和Set是一种专门用来进行搜索的容器或者数据结构,其搜索效率与具体实例化的子类有关。

我们之前学过的常见搜索方式有:

常见方式:

1.直接遍历,时间复杂度为O(N),如果元素太多,效率就会太低。

2.二分查找,时间复杂度为O(logN),但是前提要求数据是有序的。


关于静态查找:

静态查找其实就是我们通俗意义上的查找,既查找一个特定的元素是否存在,既:

(1)查看某特定的关键字是否在表中(判断性查找)
(2)检索某特定关键字数据元素的各种属性(检索性查找)

上述查找方式比较适合静态查找,既:不会对元素进行插入和删除,但在实际应用场景中,比如:

场景:

1.按照名字查找此人的成绩。

2.在通讯录中,依照名字,查找某人的联系方式。

3.查询自己是否已被录取,既自己是否在名单中(不重复集合)。


关于动态查找:

(1)动态查找是指在一个动态数据集中搜索某个特定元素的过程。

(2)动态数据集是指在查找过程中数据集的内容可能会改变,即可以插入、删除、修改元素

上述这三种是动态查找,显然前面那些静态查找不适合这种引用场景,为了解决这种问题,适用于动态查找的数据结构出现了,既Map和Set。

二、Map

刚刚阐释的都比较假大空,我们举个显示生活中的例子,来认识一下什么事Map

在中国,每个人的身份证号一定是不同的,前3位代表所属省份,7到14位代表出生日期等。

但是中国的人口很多,身份证号不同,但是名字却有很多人是一样的。

那么在国家的人员信息系统中,如何储存这些信息呢?

咱们先入为主,自然想到的就是Map。

Map的特点是:

一次储存一对元素,关键字(Key)和值(Val)。

Key就相当于身份证号,Val就相当于咱么自己的名字。

Key一定不能重复,而Val是可以重复的。(身份证号唯一,名字不一定唯一)

每一对Key和Val是 11对应的。(通过身份证号,就可以查询这个人的名字)


专业术语:

Map的这种储存模型我们称为:Key-Value模型

一对 Key-Value 我们称为:键值对

在java集合框架中的Map:

HashMap和TreeMap的底层分别是哈希表、红黑树。

HashMap的搜索效率可以达到恐怖的O(1)也就是常量级。

TreeMap的搜索效率是O(logN),也很快。

不过这两者都是用空间效率去换取的时间效率。

关于Map的注意事项:

1. Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap,这也印证了前文所说实例化不同对象,搜索效率是不同的。

2. Map中存放键值对的Key是唯一的,value是可以重复

3. 在TreeMap中插入键值对时,key不能为空,否则就会抛NullPointerException异常,value可以为空。但是HashMap的key和value都可以为空。

5. Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。

6. Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行 重新插入。

三、Set

所以讲了Map,Set就好讲了。

Set只含有关键字Key,Key是唯一的,相当于Map的“阉割版本”。

这就说明Set失去了,把两个元素建立联系的能力(键值对的11映射)

但是他保留了Key,这也是Set的一个很大的特点:

在Set中的元素,一定没有重复的,因为每个Key是唯一的,可以达到去重的目的

在java集合框架中的Set:

关于Set的一些注意事项:

1. Set是继承自Collection的一个接口类

2. Set中只存储了key,并且要求key一定要唯一

3. TreeSet的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的---》所以讲了Map,Set就好讲了

4. Set最大的功能就是对集合中的元素进行去重

5. 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础 上维护了一个双向链表来记录元素的插入次序。

6. Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入

7. TreeSet中不能插入null的key,HashSet可以。

8.. Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)


以上就是了解Map和Set的全部内容了。

小编下一篇文章将会讲到Java中Map和Set的具体使用案例(语法),然后做一下相关的题目,加深对Map和Set的使用场景和印象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/586952.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql--创建数据库

一、创建一个数据库 “db_classes” mysql> create database db_classes; mysql> show databases; -------------------- | Database | -------------------- | db_classes | | information_schema | | mysql | | performance_schema | |…

开通Jetbrains个人账号,赠送这些付费插件

开通Jetbrains个人账号,或者Jetbrains现成账号的, 可赠送以下付费插件 现成账号:https://web.52shizhan.cn/activity/xqt8ly 个人账号:https://web.52shizhan.cn/legal 账号支持全家桶系列:AppCode,CLion,DataGrip,GoLand,Intell…

Codeforces Round 941 (Div. 2) (A~D)

1966A - Card Exchange 题意&#xff1a; 思路&#xff1a;手玩一下发现当存在某个数字个数超过k个&#xff0c;那么就能一直操作下去。那么答案就是k-1. void solve() {cin >> n >> m;map<int,int>mp;int maxx 1;for(int i 0 ; i < n ; i ){int x;c…

手把手教数据结构与算法:优先级队列(银行排队问题)

队列 基本概念 队列的定义 队列&#xff08;Queue&#xff09;&#xff1a;队列是一种常见的数据结构&#xff0c;遵循先进先出&#xff08;First-In-First-Out, FIFO&#xff09;的原则。在队列中&#xff0c;元素按照进入队列的顺序排列。队列是一个线性的数据结构&#x…

深入解析yolov5,为什么算法都是基于yolov5做改进的?(一)

YOLOv5简介 YOLOv5是一种单阶段目标检测算法&#xff0c;它在YOLOv4的基础上引入了多项改进&#xff0c;显著提升了检测的速度和精度。YOLOv5的设计哲学是简洁高效&#xff0c;它有四个版本&#xff1a;YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;分别对应不同的模型大小…

深度学习从入门到精通——词向量介绍及应用

词向量介绍 词向量&#xff08;Word embedding&#xff09;&#xff0c;即把词语表示成实数向量。“好”的词向量能体现词语直接的相近关系。词向量已经被证明可以提高NLP任务的性能&#xff0c;例如语法分析和情感分析。词向量与词嵌入技术的提出是为了解决onehot的缺陷。它把…

pytorch中创建maskrcnn模型

0.模型输入/输出参数参见 链接: pytorch的mask-rcnn的模型参数解释 核心代码 GeneralizedRCNN(这里以mask-rcnn来解释说明) # 通过输入图像获取fpn特征图,注意这里的backbone不是直接的resnet,而是fpn化后的 features self.backbone(images.tensors) # 由于是mask-rcnn,故而…

如何快速搭建nginx服务

华子目录 nginx简介概念特点nginx框架nginx关键工作机制 nginx正向代理功能nginx反向代理功能nginx反向代理的工作流程代理本质 nginx负载均衡部署nginx常用命令systemctl系列nginx自带命令 nginx配置文件主配置文件/etc/nginx/nginx.conf内容结构模块分析配置分析注意示例 ngi…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…

【已解决】Python Selenium chromedriver Pycharm闪退的问题

概要 根据不同的业务场景需求&#xff0c;有时我们难免会使用程序来打开浏览器进行访问。本文在pycharm中使用selenium打开chromedriver出现闪退问题&#xff0c;根据不断尝试&#xff0c;最终找到的问题根本是版本问题。 代码如下 # (1) 导入selenium from selenium import …

C++ stack、queue以及deque

1、stack和queue常用接口 严格来说栈和队列的实现是容器适配器 1、常用接口&#xff1a; 栈&#xff1a;top、push、pop、size、emptystack - C Reference (cplusplus.com) 队列&#xff1a;top、push、pop、swap、size、emptyqueue - C Reference (cplusplus.com) 2、deque&a…

Android手势识别面试问题及回答

问题 1: 如何在Android中实现基本的手势识别&#xff1f; 答案: 在Android中&#xff0c;可以通过使用GestureDetector类来实现基本的手势识别。首先需要创建一个GestureDetector的实例&#xff0c;并实现GestureDetector.OnGestureListener接口来响应各种手势事件&#xff0c…

ubuntu安装mysql时候修改root密码

前情&#xff1a; 使用set password for rootlocalhost ‘passwd’&#xff1b; set password for ‘root’‘localhost’‘passwd’&#xff1b; update user set passwordpassword(‘passwd’) where user‘root’ and host ‘localhost’; flush privileges; 以上方法均报…

定制开发AI智能名片商城小程序:玩转积分制度的成功案例

在数字化浪潮席卷而来的今天&#xff0c;企业营销方式不断创新&#xff0c;力求在众多竞争对手中脱颖而出。其中&#xff0c;积分制度以其直观、有效的特点&#xff0c;成为了众多企业的营销利器。某时尚品牌“潮流前线”便是其中的佼佼者。他们通过定制一款AI智能名片商城小程…

德国著名自动化公司Festo设计了一款仿生蜜蜂,仅重34g,支持多只蜜蜂编队飞行!...

德国著名的气动元件研发及自动化解决方案供应商Festo公司近日展示了一款仿生蜜蜂&#xff08;BionicBee&#xff09;&#xff0c;重量只有34g&#xff0c;却完全可以实现自主飞行&#xff0c;还支持多只相同的蜜蜂机器人编队飞行。 BionicBee 重约 34 克&#xff0c;长 22 厘米…

二叉树的前序,中序,后序遍历

二叉树可以分为左子树&#xff0c;右子树和根节点。同时左子树和右子树又可以分为新的左子树和右子树加上新的根节点&#xff0c;以此类推。 二叉树的前序&#xff0c;中序&#xff0c;后序遍历也叫前根遍历&#xff0c;中根遍历&#xff0c;后根遍历或者前序遍历&#xff0c;…

【Vue 2.x】学习vue之三路由

文章目录 Vue三路由第十章1、vue中的路由vue的应用分为a、多页面应用b、单页面应用 2、路由的基本应用1、基础2、使用3、加载 3、vue组件的分类1、普通组件2、路由组件 4、路由的嵌套5、路由传递Query参数1、拼接参数传递2、路由传递对象 6、简化路由1、命名路由 7、parms传递参…

控制台主机不能运行,切换终端实现RPG运行

鄙人转载&#xff0c;主要是移植过程中使用小熊猫C2.25.1 过程中&#xff0c;字符集不同&#xff0c;导致某些空格 从bilibili专栏粘贴导致出现符号不匹配&#xff0c;但是编辑器不能替换 用原来的devc 5.11 发现问题&#xff0c;读出额外的英文&#xff1f; 使用文件替换&…

C语言贪吃蛇项目

今天给大家带来一款简单的贪吃蛇游戏&#xff0c;一起随我来看看吧 游戏效果&#xff1a; 实现基本的功能&#xff1a; • 贪吃蛇地图绘制 • 蛇吃⻝物的功能&#xff1a;&#xff08;上、下、左、右⽅向键控制蛇的动作&#xff09; • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分…

5.C++动态内存管理(超全)

目录 1 .C/C 内存分布 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 3.3 operator new函数 3.4 定位new表达式(placement-new) &#xff08;了解&#xff09; 4. 常…