Map与Set中的两大实现类✌

news2025/1/13 20:01:48

map与set中的两大实现类

  • map和set
      • Set的两种常用形态
      • Map的两种常用形态
      • 实战💪

map和set

哈希表(hashMap)和 集合 (Set)是数据结构中比较常用的一部分,他们的特性通常可以解决很多问题,这两个数据结构是同根生,存储数据的方式也很特别。hashmap相当于一个地图,存储数据是按照键值对的方式来存储的,就等于一种类对象的数据模式。Set是一种集合,存储方式与数组差不多。不过虽然这两种数据结构与其他数据有些相同之处,不过他们最大的区别就是,set中不会存储两个相同的值,存储在set中的值都是唯一的。同样的,hashmap中的键也是唯一的。利用这两个数据的特性解决一些问题是不是会方便许多。

Set的两种常用形态

Set是一个Java集合框架的一个接口,存储的元素都是唯一的。因为是接口,所有只能使用接口实现类来构造:
在这里插入图片描述

常见的有三种,常用的只有两种:HashSet,TreeSet,那么这两个分别有什么区别呢?

特性比较HashSetTreeSet
内部实现使用红黑树实现使用哈希表实现
有序性有序无序
查找删除元素时性能时间复杂度为常数时间复杂度为O(log2)
对元素相等时的判断使用equals使用比较器或者comparaTo方法
数据大时优先选择不推荐

先来了解一下如何构造:

set和map后的<>中可以添加基本数据类型和引用类型

Set<Integer> set = new HashSet<>();
HashSet<Integer> hashSet = new HashSet<>();
TreeSet<Integer> treeSet = new TreeSet<>();

学习完构造方法,那我们来了解一些方法,如何快速上手:

在这里插入图片描述

Map的两种常用形态

与前者一样,map也是Java的数据框架接口类,因为它独特的存储方式,备受喜爱,在排除元素或者统计元素个数时使用十分方便,因为HaspMap查找一个数据的时间复杂度是一个常数项,也就是O(1),几乎达到了最快速度。查找元素如此高效与它底层结构脱不了干系!

特性HashMapTreeMap
底层数据结构链表加数组或红黑树红黑树
排序无序有序,按升序排序
查找元素删除元素效率高效,时间复杂度为O(1)时间复杂度为O(log2)
使用空间时内存相对于TreeMap少使用内存多一些,需要维护树

如何构造一个哈希表:

HashMap<Integer,Integer> hashMap = new HashMap<>();
TreeMap<Integer,Integer> treeMap = new TreeMap<>();

基本方法:

在这里插入图片描述

实战💪

leetcode-宝石与石头

可以拿这个题练习一下。

这里我使用了Set保存’宝石‘,然后去石头中进行对比,得到宝石数量,返回即可。利用了set中的元素唯一性和判断元素存在集合的方法。感兴趣的小伙伴可以多多练习o((>ω< ))o

class Solution {
    public int numJewelsInStones(String jewels, String stones) {
        Set<Character> set = new HashSet<>();
        for (char ch:jewels.toCharArray()) {
            set.add(ch);
        }
        int ret = 0;
        for (char ch:stones.toCharArray()) {
            if(set.contains(ch)){
             ret++;   
            }
        }
        return ret;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python开发之实现SG滤波

Python开发之实现SG滤波 1 SG滤波2 借助Python中的scipy.signal库实现SG滤波3 手动代码实现SG滤波 前言&#xff1a;主要介绍SG滤波的Python实现&#xff0c;顺带介绍SG滤波的实现原理。 1 SG滤波 Savitzky-Golay滤波器&#xff08;通常简称为S-G滤波器&#xff09;最初由Savi…

一百一十六、Zeppelin——Zeppelin0.9.0连接ClickHouse21.9.5.16(亲测有效,附步骤截图)

版本&#xff1a;Zeppelin0.9.0 ClickHouse21.9.5.16 1.目标&#xff1a;Zeppelin连上clickhouse&#xff0c;可以把clickhouse中的数据做可视化展示 2.参考文件&#xff1a;如何基于zeppelin JDBC Interpreter进行jdbc数据源的可视化交互分析 http://t.csdn.cn/DGH…

数智融合 | 美格智能助力AIGC产业迈向新未来

5月11日&#xff0c;在2023 “高通&美格智能物联网技术开放日”深圳站活动上&#xff0c;美格智能副总经理金海斌以《数智引领 融合创新》为题分享了5GAIoT技术赋能的价值展望。 ▲美格智能副总经理 金海斌 ▌算力&#xff1a;数字经济时代的“石油” 今年&#xff0c;由C…

Spring Boot 拦截器

Spring Boot 拦截器介绍 Spring Boot 拦截器是 AOP 的一种实现&#xff0c;专门拦截对控制层的请求&#xff0c;主要应用于判断用户权限&#xff0c;拦截webSocket请求。SpringBoot中的拦截器实现和spring mvc 中是一样的&#xff0c;它的大致流程是&#xff0c;先自己定义一个…

软件测试注意面试官的常规“套路”

一、自我介绍 这里就不过多阐述了&#xff0c;相信很多小伙伴都有。 二、灵活问题 1、大概说说之前公司的测试流程。 2、测试报告有哪些内容? 3、如何保证用例的覆盖度? 4、什么是测试用例,什么是测试脚本?两者的关系&#xff1f; 5、Bug的级别&#xff0c;按照什么划…

使用Simulink中的MATLAB Function模块存在的bug

为什么simulink中的MATLAB Function 模块需要按Ctrl+C才能中断程序??? 否则就会像这样一直是正在运行!!需要按Ctrl+C才能中断循环!!神奇的是每次需要按Ctrl+C才可运行simulink程序?? 再次打开Simulink中MATLAB function模块会出现以下bug: function [qr, qr_a, qr…

【Android Jetpack】新一代导航管理——Navigation

前言 不知道小伙伴们是否注意到&#xff0c;用AS创建一个默认的新项目后&#xff0c;MainActivity已经有了很大的不同&#xff0c;最大的区别就是新增加了两个Fragment&#xff0c;同时我们注意到这两个Fragment之间跳转的时候并没有使用之前FragmentTransaction这种形式&…

Nginx基本使用以及部署前端项目

前言 最近学习了一下Nginx&#xff0c;整理了一个博客&#xff0c;主要参考的是狂神说的b站视频教程&#xff0c;文章链接如下&#xff1a;狂神说Nginx快速入门 一、下载、启动Nginx 1.下载Nginx 到Nginx官方选择自己电脑适用的稳定版本下载&#xff0c;我下载的的windows版…

Web Components

1、前期回顾 JavaScript沙箱 1.1、什么是沙箱 在计算机安全中&#xff0c;沙箱&#xff08;Sandbox&#xff09;是一种用于隔离正在运行程序的安全机制&#xff0c;通常用于执行未经测试或者不受信任的程序或代码&#xff0c;它会为待执行的程序创建一个独立的执行环境&#x…

图解LeetCode——206. 反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 二、示例 2.1> 示例 1&#xff1a; 【输入】head [1,2,3,4,5] 【输出】[5,4,3,2,1] 2.2> 示例 2&#xff1a; 【输入】head [1,2] 【输出】[2,1] 2.3> 示例 3&#…

六级备考32天|CET-6|分数分布|题型分布|翻译·贴春联·CCTV·印章|16:30~17:47

目录 英语六级总分&#xff1a;710分 一、英语六级作文 二、听力部分 248.5分 三、阅读理解35% 248.5分 四、翻译部分 汉译英 15% 106.5分 五、做题技巧 写作和翻译需要重点强化练习&#xff01; 六、积累 英语六级总分&#xff1a;710分 一、英语六级作文 说明&…

HTTP第13讲——HTTP的实体数据

数据类型与编码 在 TCP/IP 协议栈里&#xff0c;传输数据基本上都是“headerbody”的格式。但 TCP、UDP 因为是传输层的协议&#xff0c;它们不会关心 body 数据是什么&#xff0c;只要把数据发送到对方就算是完成了任务。 而 HTTP 协议则不同&#xff0c;它是应用层的协议&am…

pytorch实战11:基于pytorch简单实现DCGAN

基于pytorch简单实现DCGAN 前言 ​ 最近会把一些简单的CV领域的架构进行复现&#xff0c;完整的代码在最后。 本系列必须的基础 ​ python基础知识、CNN原理知识、pytorch基础知识 本系列的目的 ​ 一是帮助自己巩固知识点&#xff1b; ​ 二是自己实现一次&#xff0c;可以发…

ZED使用指南(五)Camera Controls

六、其他 1、相机控制 &#xff08;1&#xff09;选择视频模式 左右视频帧同步&#xff0c;以并排格式作为单个未压缩视频帧流式传输。 在ZED Explorer或者使用API可以改变视频的分辨率和帧率。 &#xff08;2&#xff09;选择输出视图 ZED能以不同的格式输出图像&#xf…

Android系统原理性问题分析 - Android Native程序的结构设计方式

Android核心原理 5.3 声明 在Android系统中经常会遇到一些系统原理性的问题&#xff0c;在此专栏中集中来讨论下。Android系统主要由Java和C/C两个世界构成&#xff0c;此篇分析处于Java世界和C/C世界的两个进程如何实现进程间通信的问题。此篇参考一些博客和书籍&#xff0c…

Go程序设计语言翻译问题(goroutine)

中文&#xff1a;Go程序设计语言 2017.1 英文&#xff1a;The Go Programming Language 2016 8.4.2. Pipelines 8.4.2管道章节 修正&#xff1a; 第一个管道应该改成通道&#xff0c;cannel是概念词汇 重要概念词汇不能混淆 来自chatGPT3.5&#xff1a; Go Pipelines和channel…

(kubernetes yaml文件|--dry-run导出yaml文件

kubernetes yaml文件|--dry-run导出yaml文件 YAML 语法格式&#xff1a;二 查看 api 资源版本标签三 写一个nignx.yaml文件demo四、编写service服务的资源清单详解k8s中的port五 用–dry-run命令生成yaml资源清单六 将现有的资源生成模板导出写yaml太累怎么办&#xff1f; YAML…

【Linux】1. Linux常见指令

专栏导读 &#x1f341;作者简介&#xff1a;余悸&#xff0c;在读本科生一枚&#xff0c;致力于 C方向学习。 &#x1f341;收录于 C 专栏&#xff0c;本专栏主要内容为 C 初阶、 C 进阶、 STL 详解等&#xff0c;持续更新中&#xff01; &#x1f341;相关专栏推荐&#xff1…

社会关系抽取赛题提交指南

社会关系抽取赛题提交指南 一、赛题背景 本次主要为大家介绍社会科学计算大赛的赛题之一---社会关系抽取。 1.技术发展 关系抽取(Relationship Extraction, RE)是信息抽取的一个重要任务,其目标是从文本中抽取实体之间的关系。RE技术发展历程主要有以下几个阶段:1. 规则与模…

初窥机器视觉与卷积神经网络

文章目录 1. 什么是卷积神经网络2. 卷积运算3. 池化层4. 卷积神经网络的整体架构 1. 什么是卷积神经网络 卷积神经网络(convolutional neural network&#xff0c;CNN)主要用于计算机视觉相关任务&#xff0c;但处理对象并不局限于图像&#xff0c;CNN在序列和语音等上的应用也…