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

C# List与HashSet的contains()方法查询速度比较

List 和HashSet同时查询40万条数据,谁的效率更高?
 

 //**1.下面是List底层源码**public boolean contains(Object o) {//如果查到我们想要查询的值则返回一个true,否则返回false,return indexOf(o) >= 0;//这里是调用了indexOf方法,并且判断是否有值>=0;
}//下面再看IndexOf这个方法,是如何给我们实现40w条数据当中如何进行查询
public int indexOf(Object o) {//判断我里面是否有我们输入的值,所以我们如果要查询的话,肯定是要走elseif (o == null) {for (int i = 0; i < size; i++)if (elementData[i]==null)return i;} else {//直接看这里,ArrayList他这里是一个循环for (int i = 0; i < size; i++)//内部是使用if来判断,判断40w条数据当中,是否有我们需要查询的值,查询到了并且会返回,如果需要查询40w次,也就是意味着需要循环判断40w次,所以这种效率是非常低下。if (o.equals(elementData[i]))return i;}return -1;}
}

HashSet

// HashSet的contains()方法,可以看到HashSet底层他是调用了map集合的containsKey方法
public boolean contains(Object o) {return map.containsKey(o);
}//containsKey方法,他调用了getNode方法,
public boolean containsKey(Object key) {
调用getNode方法,并且这里做了一个判断,其意思是,我们add的时候,他是做了一个	hash值的运算,然后当我们去取的时候,他是直接计算我们要取的值的Hash值,return getNode(hash(key), key) != null;}//这个是 getNode 方法,可以看到这两个参数,他是根据你传进去的key和hash值存放到对应的节点。所以我们再使用hashSet进行查询的时候,hashset他是根据对象的hash值和key来直接进行定位的,所以其效率要高于ArrayList。
final Node<K,V> getNode(int hash, Object key) {Node<K,V>[] tab; Node<K,V> first, e; int n; K k;if ((tab = table) != null && (n = tab.length) > 0 &&(first = tab[(n - 1) & hash]) != null) {if (first.hash == hash && // always check first node((k = first.key) == key || (key != null && key.equals(k))))return first;if ((e = first.next) != null) {if (first instanceof TreeNode)return ((TreeNode<K,V>)first).getTreeNode(hash, key);do {if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k))))return e;} while ((e = e.next) != null);}}

大数据量很大时,由于HashSet对存入值进行hash处理,所以在比对是否存在时会非常快

相关文章:

C# List与HashSet的contains()方法查询速度比较

List 和HashSet同时查询40万条数据&#xff0c;谁的效率更高&#xff1f; //**1.下面是List底层源码**public boolean contains(Object o) {//如果查到我们想要查询的值则返回一个true&#xff0c;否则返回false&#xff0c;return indexOf(o) > 0;//这里是调用了indexOf方…...

命令执行漏洞复现攻击:识别威胁并加强安全

环境准备 这篇文章旨在用于网络安全学习&#xff0c;请勿进行任何非法行为&#xff0c;否则后果自负。 一、攻击相关介绍 原理 主要是输入验证不严格、代码逻辑错误、应用程序或系统中缺少安全机制等。攻击者可以通过构造特定的输入向应用程序或系统注入恶意代码&#xff…...

Keepalived实现服务器的高可用性

目录 背景方案简介KeepalivedHeartbeat Keepalived技术介绍Keepalived通信方式时间同步 Keepalived配置案例Keepalived日志配置Keepalived服务配置全局配置段VRRP配置段Keepalived服务启动 服务异常检测 背景 在实际应用中&#xff0c;为了提高服务器的高可用性&#xff0c;往…...

Python程序化交易接口批量获取数据源码

小编举例下面是一个简单的示例代码&#xff0c;展示如何使用Python的程序化交易接口批量获取数据&#xff0c;例如开发文档参考&#xff1a;MetaTradeAPI (metatradeapi) - Gitee.com 签名 int Init(); 功能 API 初始化 参数 无 返回值 授权成功的交易账户数量 返回值 &…...

【强化学习】基本概念

基本大概框架 强化学习的主要角色是 智能体 &#xff08;agent&#xff09;和 环境,环境是智能体存在和互动的世界。智能体根据当前的环境做出action&#xff0c;action影响环境。然后智能体根据新的环境再进行action。 基础用语 状态&#xff08;state, s&#xff09;&…...

0001__安装electron失败 postinstall: `node install.js`

不一样的 npm 快速安装electron的方案 - 简书 2、手动下载出错的文件 打开浏览器输入 下述网址&#xff0c; 找到你要的版本号&#xff0c; 点击后找到你的平台点击即可下载了。https://registry.npmmirror.com/binary.html?pathelectron/ 作者&#xff1a;一颗人心 链接&…...

Linux测开常用命令总结

文章目录 Linux系统中文件目录树 基本指令的使用&#xff1a; Linux命令的帮助信息查看 --help command --help 说明&#xff1a; 显示command 命令的帮助信息通过man命令查看帮助信息 man command( 命令的名称) man 命令查看的帮助信息更加详细ls&#xff0c;pwd&#xff0c…...

xml转化为txt数据的脚本,为yolo提供训练

这里写自定义目录标题 xml转化为txt数据的脚本 xml转化为txt数据的脚本 代码如下&#xff1a; import xml.etree.ElementTree as ET import os, cv2 import numpy as np from os import listdir from os.path import joinclasses []def convert(size, box):dw 1. / (size[0…...

【H5页面嵌入到小程序或APP中实现手机号点击复制和拨号功能】

在H5界面嵌入到小程序和移动应用&#xff08;安卓和iOS&#xff09;中实现手指点击手机号弹出弹窗&#xff0c;包含呼叫和复制选项&#xff0c;是可以实现的。下面我将为你提供一个基本的示例&#xff0c;并解释在小程序、安卓和iOS中要做的支持工作。 <!DOCTYPE html> …...

Kubernetes技术--k8s核心技术 configMap

1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示:...

Springboot动态修改日志级别

在开发和运维过程中&#xff0c;我们经常需要调整日志级别来查看不同级别的日志信息。传统的做法是修改配置文件&#xff0c;然后重启应用程序。但是&#xff0c;在分布式系统中&#xff0c;重启应用程序可能比较麻烦&#xff0c;而且也影响了业务的正常运行。 Springboot提供…...

新手将最简单的springboot部署上tomcat出现的意外问题

现阶段springboot部署到tomcat的文章一抓一大把且都相同,便贴一个地址以展示流程: SpringBoot打war包部署Tomcat(最全)_spring boot war 部署tomcat_聊Java的博客-CSDN博客 那么就说一下我出现的问题: 在完整复现流程且确认代码无误的情况下,部署到tomcat,此时问题出现了:启动…...

P1177 【模板】排序(Sort排序)

题目描述 将读入的 N N N 个数从小到大排序后输出。 输入格式 第一行为一个正整数 N N N。 第二行包含 N N N 个空格隔开的正整数 a i a_i ai​&#xff0c;为你需要进行排序的数。 输出格式 将给定的 N N N 个数从小到大输出&#xff0c;数之间空格隔开&#xff0c…...

软件测试(黑盒测试、白盒测试、灰盒测试)

软件测试方法大类上分为黑盒测试、白盒测试和灰盒测试三种 一、黑盒测试 黑盒测试通俗来说即不知道代码是怎么写的。具体实现逻辑&#xff0c;基于代码输入有哪些应该输出什么进行测试的方法。其方法有&#xff1a;基于直觉和经验的方法&#xff08;IEBT&#xff09;、基于需…...

昨天面试的时候被提问到的问题集合。

1、vue的双向绑定原理是什么&#xff1f;里面的关键点在哪里&#xff1f; 2、实现水平垂直居中的方式&#xff1f; 3、常用伪元素有哪一些&#xff1f; 4、移动端如何适配不同屏幕尺寸&#xff1f; 5、本地存储有哪一些&#xff1f;他们三者有什么区别&#xff1f; 6、JS的数据…...

广电运营商三网融合监控运维方案

随着三网融合逐步发展、深化&#xff0c;广电网络从为用户提供原本单一的信息服务转向了集语音、文字、图像为一体的信息服务&#xff0c;同时也实现了由单一独立的网络向综合性网络的改变。如何在业务的融合与竞争中创造核心竞争力&#xff0c;利用自身网络覆盖率上的优势&…...

数据库锁简析

数据库大并发操作要考虑死锁和锁的性能问题。用T1代表一个数据库执行请求&#xff0c;T2代表另一个请求&#xff0c;也可以理解为T1为一个线程&#xff0c;T2 为另一个线程。T3,T4以此类推。下面以SQL Server为例。 锁的种类 共享锁(Shared lock) 例1&#xff1a;T1: select…...

说说广播流与普通流

分析&回答 user actions 可以看作是事件流&#xff08;普通流&#xff09;patterns 为广播流,把全量数据加载到不同的计算节点。 广播流 Broadcast是一份存储在TaskManager内存中的只读的缓存数据在执行job的过程中需要反复使用的数据&#xff0c;为了达到数据共享&am…...

内卷的本质和大数据在计量经济学领域的运用思考

内卷的本质和大数据在计量经济学领域的运用思考 今天我们来思考两个问题&#xff1a; 当下经济的困局在哪里&#xff1f;为何内卷越来越严重&#xff1f;内卷的本质是什么&#xff1f;为何会出现内卷&#xff1f;市场经济运行的底层逻辑是什么&#xff1f;西方经济学理论的指导…...

毕业设计-摄像头识别二维码

本毕业设计采用imx6ull-linux4.1.15-qt5.6开发板进行测试 相关交叉编译包和摄像头测试程序已上传&#xff1a;https://download.csdn.net/download/qq_42952079/88282608 将zbar和opencv下的lib库文件拷贝到开发板的lib目录下&#xff0c;将camera可执行文件拷贝到开发板目录下…...

跨镜头人物ID稳定性不足,深度拆解Sora 2的Temporal Identity Token机制与3层对抗对齐策略

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;跨镜头人物ID稳定性不足的根源诊断 跨镜头人物ID稳定性不足是多目标跟踪&#xff08;MOT&#xff09;系统在真实监控场景中面临的核心瓶颈。其本质并非单一模块失效&#xff0c;而是特征表征、时空建模与数据分…...

跳出传统 RAG!用 LLM Wiki 构建闭环式产品 Agent 协作体系

这段时间我在了解 LLM Wiki 之后&#xff0c;把它当成一套「私域知识库 Agent 工作流」的底座&#xff0c;做了一次具体实践。这篇文章主要想记录我对 LLM Wiki 的理解&#xff0c;以及我怎么基于这套思路去构建一个产品 Agent&#xff1a;知识库如何组织&#xff0c;产品工作…...

树莓派4B + Python3 + OpenCV 实时扫码:从CSI摄像头调试到pyzbar优化,解决高延迟卡顿问题

树莓派4B动态扫码性能调优实战&#xff1a;从硬件选型到代码级优化 在智能仓储、自动化物流和创客项目中&#xff0c;实时二维码识别一直是核心需求。树莓派4B凭借其均衡的算力和丰富的扩展接口&#xff0c;成为这类场景的首选平台。但当开发者尝试用PythonOpenCVpyzbar构建动…...

如何用Seraphine智能游戏助手5分钟提升排位赛胜率:免费英雄联盟战绩查询工具完整指南

如何用Seraphine智能游戏助手5分钟提升排位赛胜率&#xff1a;免费英雄联盟战绩查询工具完整指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 还在为排位赛的BP阶段手忙脚乱吗&#xff1f;每次选英雄时都担…...

RAG 检索增强生成(全链路)

目录一、什么是RAG(Retrieval-augmented Generation)二、核心流程三、从零实战1. 环境准备2. 准备你的资料3. 代码4. 运行结果四、RAG全链路1. 文档切分&#xff08;切块&#xff09;2. Embedding 向量化3. 向量库存储4. 语义检索5. LLM生成回答必备5个工具&#xff08;全免费&…...

3分钟学会使用elan:告别Lean版本混乱的智能版本管理器

3分钟学会使用elan&#xff1a;告别Lean版本混乱的智能版本管理器 【免费下载链接】elan The Lean version manager 项目地址: https://gitcode.com/gh_mirrors/el/elan 还在为不同Lean项目需要不同版本而头疼吗&#xff1f;elan作为Lean定理证明器的智能版本管理器&…...

记录人生第一个Linux内核Patch被采纳的经历

最近运气不错&#xff0c;提交的一个关于 Linux 内核 SMMUv3 驱动的补丁&#xff08;Patch&#xff09;被采纳了。虽然只是一个边界条件的微调&#xff0c;但作为自己的第一个 Patch&#xff0c;过程还挺有意思的&#xff0c;中间也暴露出自己不少技术盲区。趁着记忆热乎&#…...

Logistic Regression实战指南:Python构建可解释二分类模型

1. 这不是数学课&#xff0c;是解决真实问题的工具链——从“预测用户是否会点击广告”说起你手头有一份电商后台导出的用户行为日志&#xff1a;20万条记录&#xff0c;每条包含年龄、性别、浏览时长、页面跳转次数、是否收藏过商品、最近一次下单距今天数……最后一列是标签&…...

CentOS Stream 9初体验:除了名字加了Stream,桌面和内核到底有哪些升级?

CentOS Stream 9深度评测&#xff1a;技术选型者的上游发行版实战指南 当红帽宣布CentOS Linux转向Stream模式时&#xff0c;整个开源社区掀起了一场关于"稳定性与前瞻性如何平衡"的持久讨论。作为RHEL上游的滚动预览版&#xff0c;CentOS Stream 9的定位已从传统的&…...

别再让日志拖慢你的服务器!深入对比C++同步与异步日志的性能差异(附TinyWebServer实测)

C服务器日志性能优化实战&#xff1a;同步与异步方案深度对比 当你的Web服务器开始承载真实流量时&#xff0c;那些看似无害的日志语句可能正在悄悄吞噬着系统性能。我曾在一个电商促销日亲眼目睹&#xff0c;由于同步日志的阻塞导致服务器响应时间从50ms飙升到800ms&#xff0…...