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

Java集合利器 Map Set

Map & Set

  • 一、概念
  • 二、Map
  • 三、Set
  • 下期预告

一、概念

MapSet是一种专门用来进行搜索的数据结构,其搜索的效率与其具体的实例化子类有关。它们分别定义了两种不同的数据结构和特点:

  1. Map(映射) :Map是一种键值对(key-value)的集合,每个键值对都是一个元素。
  2. Set(集合):Set是一种不允许重复元素(key)的集合。


通过查看Java集合框架图,可以看到,Set 接口有两个实现类:TreeSet 类和 HashSet 类Map 接口有两个实现类:TreeMap 和 HashMap

二、Map

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

Map常用方法

方法描述
V get(Object key)返回键对应的值
V getOrDefault(Object key, V defaultValue)返回键对应的值,如果键不存在则返回默认值
V put(K key, V value)设置键对应的值
V remove(Object key)删除键及其对应的映射关系
int size()返回Map中键值对的数量
Set keySet()返回所有键的不重复集合
Collection values()返回所有值的可重复集合
Set<Map.Entry<K, V>> entrySet()返回所有键-值映射关系的集合
boolean containsKey(Object key)判断是否包含指定键
boolean containsValue(Object value)判断是否包含指定值

在上面的Map方法中,ebtrySet()方法返回值中出现了一个特殊的类型 Map.Entry<K, V>,它是Map内部实现的用来存放<key, value>键值对映射关系的内部接口,该内部接口中主要提供了key、 value 的获取,以及value的设置等方法:

方法描述
K getKey()返回 entry 中的键
V getValue()返回 entry 中的值
V setValue(V value)将键值对中的值替换为指定的值

注意:

  1. Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap,还有一个LinkedHashMap,LinkedHashMap是在HashMap的基础上维护了一个双向链表来记录元素的插入次序。
  2. Map中存放键值对的Key是唯一的,value是可以重复的
  3. 在TreeMap中插入键值对时,key不能为空,否则就会抛NullPointerException异常,value可以为空。但
    是HashMap的key和value都可以为空。
  4. Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。
  5. Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。
  6. Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行
    重新插入。

TreeMap和HashMap的区别

属性TreeMapHashMap
底层数据结构红黑树哈希桶
插入/删除/查找时间复杂度O(log N)O(1)
是否有序关于Key有序无序
线程安全性不安全不安全
插入/删除/查找区别需要进行元素比较通过哈希函数计算哈希地址
比较与覆写key必须能够比较,否则会抛出 ClassCastException 异常自定义类型需要覆写 equalshashCode 方法
应用场景需要Key有序场景下Key是否有序不关心,需要更高的时间性能

三、Set

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

Set常用方法

方法描述
boolean add(E e)添加元素,但重复元素不会被添加成功
void clear()清空集合
boolean contains(Object o)判断 o 是否在集合中
Iterator 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. TreeSet的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
  4. Set最大的功能就是对集合中的元素进行去重
  5. 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础
    上维护了一个双向链表来记录元素的插入次序。
  6. Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
  7. TreeSet中不能插入null的key,HashSet可以。

TreeSet和HashSet的区别

Set底层结构TreeSetHashSet
底层结构红黑树哈希桶
插入/删除/查找时间复杂度O(log N)O(1)
是否有序关于Key有序不一定有序
线程安全性不安全不安全
插入/删除/查找区别按照红黑树的特性来进行插入和删除先计算key哈希地址,然后进行插入和删除
比较与覆写key必须能够比较,否则会抛出ClassCastException异常;自定义类型需要覆写equals和hashCode方法
应用场景需要Key有序场景下Key是否有序不关心,需要更高的时间性能

下期预告

上述提到了HashMap 和 HashSet,它们底层都使用到了哈希表结构,关于 哈希表,我们下一章节介绍!

相关文章:

Java集合利器 Map Set

Map & Set 一、概念二、Map三、Set下期预告 一、概念 Map和Set是一种专门用来进行搜索的数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。它们分别定义了两种不同的数据结构和特点&#xff1a; Map&#xff08;映射&#xff09; &#xff1a;Map是一种键值对&…...

HJ106 字符逆序

描述 将一个字符串str的内容颠倒过来&#xff0c;并输出。 数据范围&#xff1a;1≤len(str)≤10000 1≤len(str)≤10000 输入描述&#xff1a; 输入一个字符串&#xff0c;可以有空格 输出描述&#xff1a; 输出逆序的字符串 示例1 输入&#xff1a; I am a student 输…...

sentinel的基本使用

在一些互联网项目中高并发的场景很多&#xff0c;瞬间流量很大&#xff0c;会导致我们服务不可用。 sentinel则可以保证我们服务的正常运行&#xff0c;提供限流、熔断、降级等方法来实现 一.限流&#xff1a; 1.导入坐标 <dependency><groupId>com.alibaba.c…...

【STM32】串口通信乱码(认识系统时钟来源)

使用 stm32f407 与电脑主机进行串口通信时&#xff0c;串口助手打印乱码&#xff0c;主要从以下方面进行排查&#xff1a; 检查传输协议设置是否一致&#xff08;波特率、数据位、停止位、校验位&#xff09;检查MCU外部晶振频率是否和库函数设置的一致 最终发现是外部晶振频…...

Java实现敏感词过滤功能

敏感词过滤功能实现 1.GitHub上下载敏感词文件 2.将敏感词文件放在resources目录下 在业务中可以将文本中的敏感词写入数据库便于管理。 3.提供实现类demo 代码编写思路如下&#xff1a;1.将敏感词加载到list中&#xff0c;2.添加到StringSearch中&#xff0c;3.校验&#x…...

大数据向量检索的细节问题

背景:现有亿级别数据(条数),其文本大小约为150G,label为字符串,content为文本。用于向量检索,采用上次的试验进行,但有如下问题需要面对: 1、向量维度及所需空间 向量维度一版采用768的bert系列的模型推理得到,openai也有类似的功能,不过是2倍的维度(即1536),至…...

如何让智能搜索引擎更灵活、更高效?

随着互联网的发展和普及&#xff0c;搜索引擎已经成为人们获取信息、解决问题的主要工具之一。 然而&#xff0c;传统的搜索引擎在面对大数据时&#xff0c;往往存在着搜索效率低下、搜索结果精准度不够等问题。 为了解决这些问题&#xff0c;越来越多的企业开始采用智能搜索技…...

C++set集合与并查集map映射,哈希表应用实例B3632 集合运算 1P1918 保龄球

集合的性质 无序性互异性确定性 B3632 集合运算 1 题面 题目背景 集合是数学中的一个概念&#xff0c;用通俗的话来讲就是&#xff1a;一大堆数在一起就构成了集合。 集合有如下的特性&#xff1a; 无序性&#xff1a;任一个集合中&#xff0c;每个元素的地位都是相同的&…...

easyexcel合并单元格底色

一、效果图 二、导出接口代码 PostMapping("selectAllMagicExport")public void selectAllMagicExport(HttpServletRequest request, HttpServletResponse response) throws IOException {ServiceResult<SearchResult<TestMetLineFe2o3Export>> result …...

OpenCV图片校正

OpenCV图片校正 背景几种校正方法1.傅里叶变换 霍夫变换 直线 角度 旋转3.四点透视 角度 旋转4.检测矩形轮廓 角度 旋转参考 背景 遇到偏的图片想要校正成水平或者垂直的。 几种校正方法 对于倾斜的图片通过矫正可以得到水平的图片。一般有如下几种基于opencv的组合方…...

数字孪生流域共建共享相关政策解读

当前数字孪生技术在水利方面的应用刚起步&#xff0c;2021年水利部首次提出“数字孪生流域”概念&#xff0c;即以物理流域为单元、时空数据为底座、数学模型为核心、水利知识为驱动&#xff0c;对物理流域全要素和水利治理管理活动全过程的数字映射、智能模拟、前瞻预演&#…...

FSC147数据集格式解析

一. 引言 在研究很多深度学习框架的时候&#xff0c;往往需要使用到FSC147格式数据集&#xff0c;若要是想在自己的数据集上验证深度学习框架&#xff0c;就需要自己制作数据集以及相关标签&#xff0c;在论文Learning To Count Everything中&#xff0c;该数据集首次被提出。 …...

el-element中el-tabs案例的使用

el-element中el-tabs的使用 代码呈现 <template><div class"enterprise-audit"><div class"card"><div class"cardTitle"><p>交易查询</p></div><el-tabs v-model"activeName" tab-cl…...

tomcat结构目录有哪些?

bin 启动&#xff0c;关闭和其他脚本。这些 .sh文件&#xff08;对于Unix系统&#xff09;是这些.bat文件的功能副本&#xff08;对于 Windows系统&#xff09;。由于Win32命令行缺少某些功能&#xff0c;因此此处包含一些其他文件。 比如说&#xff1a;windows下启动tomcat用的…...

生成式AI系列 —— DCGAN生成手写数字

1、模型构建 1.1 构建生成器 # 导入软件包 import torch import torch.nn as nnclass Generator(nn.Module):def __init__(self, z_dim20, image_size256):super(Generator, self).__init__()self.layer1 nn.Sequential(nn.ConvTranspose2d(z_dim, image_size * 32,kernel_s…...

vscode-vue项目格式化+语法检验-草稿

Vue学习笔记7 - 在Vscode中配置Vetur&#xff0c;ESlint&#xff0c;Prettier_vetur规则_Myron.Maoyz的博客-CSDN博客...

【Java从0到1学习】10 Java常用类汇总

1. System类 System类对读者来说并不陌生&#xff0c;因为在之前所学知识中&#xff0c;需要打印结果时&#xff0c;使用的都是“System.out.println();”语句&#xff0c;这句代码中就使用了System类。System类定义了一些与系统相关的属性和方法&#xff0c;它所提供的属性和…...

第三届人工智能与智能制造国际研讨会(AIIM 2023)

第三届人工智能与智能制造国际研讨会&#xff08;AIIM 2023&#xff09; The 3rd International Symposium on Artificial Intelligence and Intelligent Manufacturing 第三届人工智能与智能制造国际研讨会&#xff08;AIIM 2023&#xff09;将于2023年10月27-29日在成都召开…...

层次分析法

目录 一&#xff1a;问题的引入 二&#xff1a;模型的建立 1.分析系统中各因素之间的关系&#xff0c;建立系统的递阶层次结构。 2.对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较&#xff0c;构造两两比较矩阵&#xff08;判断矩阵&#xff09;。 3.由判…...

Error Handling

有几个特定的异常类允许用户代码对与CAN总线相关的特定场景做出反应: Exception (Python standard library)+-- ...+-- CanError (python-can)+-- CanInterfaceNotImplementedError+-- CanInitializationError...

飞行错觉(空间定向障碍)地面模拟训练系统

飞行错觉地面模拟训练系统是一种专为飞行员设计的高科技训练装备&#xff0c;旨在通过在地面复现飞行中可能出现的空间定向障碍&#xff08;即飞行错觉&#xff09;&#xff0c;帮助飞行员识别、适应并正确应对这些错觉&#xff0c;从而提升飞行安全。这类系统结合了多模态感知…...

动态生成展示:LiuJuan20260223Zimage模型根据实时天气创作“风晴雨雪”主题画

动态生成展示&#xff1a;LiuJuan20260223Zimage模型根据实时天气创作“风晴雨雪”主题画 你有没有想过&#xff0c;家里的数字画框或者手机壁纸&#xff0c;能像有生命一样&#xff0c;随着窗外的天气实时变化&#xff1f;今天&#xff0c;我就带你体验一个特别有意思的玩法&…...

SurfaceFlinger渲染管线的三种负载状态

//frameworks/native/services/surfaceflinger/Scheduler/VsyncModulator.h enum class VsyncConfigType {Early, EarlyGpu, Late };SurfaceFlinger 内部有一个叫做 VSyncModulator(VSYNC 调制器)的组件,它就像一个自动挡变速箱。它会实时监控当前屏幕上发生的事情,并在 Ea…...

NCMconverter完整指南:3步解锁NCM音乐文件的终极播放方案

NCMconverter完整指南&#xff1a;3步解锁NCM音乐文件的终极播放方案 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 你是否曾经遇到过这样的情况&#xff1a;从音乐平台下载了心…...

【ArUco GridBoard实战】从精度瓶颈到优化检测的完整指南

1. ArUco GridBoard的精度瓶颈与优化思路 在实际的计算机视觉项目中&#xff0c;我们经常会遇到标定板尺寸受限的情况。比如我之前做的一个工业检测项目&#xff0c;标定板尺寸被限制在3cm2cm以内。最初使用的是Charuco标定板&#xff0c;但很快就发现了一个严重问题&#xff1…...

Halcon 标定(Calibration)与引导(Guidance)的工业实践:从理论到高精度落地的全链路解析

1. Halcon标定技术的基础认知 第一次接触Halcon标定时&#xff0c;我和很多新手一样被那些专业术语吓到了。但真正用起来才发现&#xff0c;这套系统就像给机器装上了"眼睛和尺子"。简单来说&#xff0c;标定就是教会相机看懂真实世界的尺寸和位置。想象一下&#xf…...

c++ 20 有什么新的功能

C20 是继 C11 之后最具革命性的 C 标准更新之一&#xff0c;引入了许多强大的新特性&#xff0c;旨在提高代码的表达力、类型安全性、编译效率和开发体验。以下是 C20 的主要新功能分类总结&#xff1a;一、四大核心语言特性1. 模块&#xff08;Modules&#xff09;目的&#x…...

零服务器生产环境监控与日志管理终极指南:保障Web应用稳定运行的10个关键策略

零服务器生产环境监控与日志管理终极指南&#xff1a;保障Web应用稳定运行的10个关键策略 【免费下载链接】zero Zero is a web server to simplify web development. 项目地址: https://gitcode.com/gh_mirrors/ze/zero Zero Server是一款革命性的Web服务器&#xff0c…...

NSSCTF题包(脱壳类和SMC)

题包里的这些类型的题这些已经接触了很长时间&#xff0c;但是仍然需要进行巩固&#xff0c;在这里先感谢师傅们还有胡楚昊大佬对我的帮助和支持这套题还有去花类的&#xff0c;前面文章讲过了脱壳类&#xff1a;主要应用的是自动脱壳以及ESP定律法手动脱壳ESP定律法&#xff1…...

nli-distilroberta-base一键部署:docker run -p 5000:5000指令直达可用服务

NLI DistilRoBERTa Base - 一键部署与使用指南 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务。这个轻量级但强大的工具能够分析两个句子之间的关系&#xff0c;为文本理解任务提供智能判断能力。 核心功能是判断"前提&qu…...