当前位置: 首页 > news >正文

MapSet之相关概念

 系列文章:

                 1.   先导片--Map&Set之二叉搜索树

                 2.   Map&Set之相关概念

目录

1.搜索

1.1 概念和场景

1.2 模型

2.Map的使用

2.1 关于Map的说明

2.2 关于Map.Entry的说明

2.3 Map的常用方法说明

3.Set的说明

3.1关于Set说明

3.2 常见方法说明


1.搜索

1.1 概念和场景

Map和Set是专门用于搜索的容器或数据结构,它们的搜索效率取决于具体的实例化子类。传统的搜索方式包括直接遍历和二分查找,但它们有一些限制。

1. 直接遍历:时间复杂度为O(N),当元素数量较多时效率较低。
2. 二分查找:时间复杂度为O(log N),但前提是序列必须是有序的。

这些方法更适合静态类型的查找,即在查找过程中不会进行插入和删除操作。然而,现实生活中的查找需求可能更加复杂,例如:

1. 根据姓名查询考试成绩
2. 不重复集合,需要先检查关键字是否已经存在于集合中

在这些情况下,直接遍历和二分查找可能不太适用,因为它们无法很好地处理动态查找的需求。所以,我们将介绍一种适合动态查找的集合容器:Map和Set。

1.2 模型

在搜索数据时,我们通常将需要查找的数据称为关键字(Key),而与之对应的数据称为值(Value)。这种键值对的结构被称为Key-value。根据实际需求,我们可以使用不同的模型来存储和处理这些键值对:

  • 纯 Key 模型:例如,当我们需要快速查找某个名字是否在某个班级中时,我们只需要知道名字这个关键字即可。在这种情况下,我们只需要存储关键字,而不需要存储与之对应的值
  • Key-Value 模型:例如,当我们需要统计文件中每个单词出现的次数时,我们需要同时存储单词(关键字)和它们出现的次数(值)。在这种情况下,我们需要存储键值对,即每个单词及其对应的次数。

Map是一种用于存储键值对的数据结构,它允许我们通过关键字快速查找对应的值。Set则是一种只存储关键字的数据结构,它主要用于检查某个元素是否存在于集合中。

2.Map的使用

map官方文档

Map (Java Platform SE 8 ) (oracle.com)https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

2.1 关于Map的说明

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

2.2 关于Map.Entry的说明

Map.Entry<K, V> Map内部实现的用来存放<key, value>键值对映射关系的内部类,该内部类中主要提供了<key, value>的获取,value的设置以及Key的比较方式。

方法解释
K getKey()返回entry中的key

V getValue()

返回entry中的value
V setValue(V value)将键值对中的value替换为指定的value

注意:Map.Entry<K, V>并没有提供设置Key的方法

2.3 Map的常用方法说明

方法解释
V get(Object key)返回 key 对应的 value
V getOrDefault(Object key, V defaultValue)返回 key 对应的 value,key 不存在,返回默认值
V put(K key, V value)

设置 key 对应的 value

V remove(Object key)删除 key 对应的映射关系
Set<K> keySet()返回所有 key 的不重复集合
Collection<V> values()返回所有 value 的可重复集合
Set<Map.Entry<K, V>> entrySet()返回所有的 key-value 映射关系
boolean containsKey(Object key)判断是否包含 key
boolean containsValue(Object value)判断是否包含 value

1. Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap 

​​

2. Map 中存储的是键值对(Key-Value),其中 Key 是唯一的,而 Value 可以重复。
3. 可以将 Map 中的所有 Key 提取出来,并存储到一个 Set 中进行访问(因为 Set 不允许重复元素)。
4. 可以将 Map 中的所有 Value 提取出来,并存储到任何 Collection 子类的集合中(Value 可能有重复)。
5. 在 Map 中,不能直接修改 Key,但可以修改 Value。如果要修改 Key,必须先删除原有的键值对,然后再重新插入新的键值对。

3.Set的说明

set官方文档

Set (Java Platform SE 8 )https://docs.oracle.com/javase/8/docs/api/java/util/Set.html

3.1关于Set说明

Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。

3.2 常见方法说明

方法解释
boolean add(E e)添加元素,但重复元素不会被添加成功
void clear()清空集合
boolean contains(Object o)判断 o 是否在集合中
Iterator<E> iterator()返回迭代器
boolean remove(Object o)删除集合中的 o
int size()返回set中元素的个数
boolean isEmpty()检测set是否为空,空返回true,否则返回false
Object[] toArray()将set中的元素转换为数组返回
boolean containsAll(Collection<?> c)

集合c中的元素是否在set中全部存在,是返回true,否则返回false

boolean addAll(Collection<? extends E> c)

将集合c中的元素添加到set中,可以达到去重的效果


1. Set 是一个继承自 Collection 的接口类,它专注于存储唯一的元素。
2. 在 Set 中,仅存储 key(关键码),并且这些 key 必须是唯一的。
3. Set 的底层实现通常基于 Map,它利用 key 与一个固定的对象(如 Object 的默认实例)作为键值对存入 Map。
4. Set 的核心功能是去除重复的元素,确保每个元素只出现一次。
5. 由于 Set 中的 key 必须唯一,任何对 key 的修改都是不允许的。如果需要修改 key,只能先删除原有的 key,然后再重新插入新的 key。
6. Set 不允许插入 null 作为 key,以确保 key 的完整性和唯一性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Windows bat脚本学习九(srec_cat)
  • openGauss 之索引回表
  • 【Netty】netty中都是用了哪些设计模式
  • 端口安全老化细节
  • 软件测试之UI自动化测试
  • 被审稿人批得体无完肤?参考文献这样引用就对了!
  • 抠像拍照技术在展厅设计中的应用,实现了哪些新颖的互动体验?
  • uniapp vite3 require导入commonJS 的js文件方法
  • mysql可重复读不能解决幻读吗?
  • 安宝特科技 | AR眼镜在安保与安防领域的创新应用及前景
  • 实时地图+瞬移,黑神话地图工具来了
  • LLM模型:代码讲解Transformer运行原理
  • 快速排序的深入优化探讨
  • RedisCache存入redis的数据key为何name和id的分隔符是两个冒号::
  • 2024年高教社杯全国大学生数学建模竞赛A题思路(2024数学建模国赛A题思路)
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • C# 免费离线人脸识别 2.0 Demo
  • isset在php5.6-和php7.0+的一些差异
  • maven工程打包jar以及java jar命令的classpath使用
  • PHP变量
  • quasar-framework cnodejs社区
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpriteKit 技巧之添加背景图片
  • 分布式事物理论与实践
  • 简单基于spring的redis配置(单机和集群模式)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 听说你叫Java(二)–Servlet请求
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​ssh免密码登录设置及问题总结
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #QT项目实战(天气预报)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • ( 10 )MySQL中的外键
  • (~_~)
  • (day 12)JavaScript学习笔记(数组3)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (回溯) LeetCode 46. 全排列
  • (三)docker:Dockerfile构建容器运行jar包
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (译) 函数式 JS #1:简介
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .Net mvc总结
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .sh 的运行
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • :=
  • [1127]图形打印 sdutOJ
  • [C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法