HashMap、HashTable、ArrayList、定长数组之间的性能和速度比较

news2024/12/26 9:27:08

1、HashMap & HashTable 的速度谁快

HashMap 牺牲了线程安全提高了效率,HashTable 牺牲了效率换来了线程安全

2、HashMap 为什么线程不安全

HashMap 底层维护了一个数组,当多线程的时候对这个数组操作是不安全的。

3、ArrayList & HashMap 通过get() 取值谁速度更快

第一种原因:

  • ArrayList 底层由数组实现,list.get(index).当ArrayList 去按索引查找时。会先去数组里比对索引是否越界。然后再去找。耗时要比HashMap慢些.
  • HashMap 由键值对存储,取值通过 map.get(key),当程序运行到此时会直接get(key)没有就返回null 。由于HashMap是允许存储空值空key的,但空key只能存储一个,所以当hashmap集合的值需要去做比对时不能使用equals。

ArrayList get(index)时会先调用rangeCheck()方法对索引进行判断ArrayList get(index)时会先调用rangeCheck()方法对索引进行判断
第二种原因:
HashMap为什么比数组查询快
  通常数组不直接保存值,而是通过保存值的list。然后对list中的“值”使用equals方法比较,这部分查询速度自然慢。但是如果有好的散列函数,数组的每个位置就只有较少的“值”。因此,不是查询所有的list,而是快速跳到数组的某个位置,只对很少的额元素进行比较,这就是HashMap会如此之快的原因。

4、定长数组是性能王者(集合里面最快的数据结构)

数组在内存中是连续存放的,所以性能很好。通过索引访问和更新元素时,不存在除范围检查之外的其他开销。
但插入元素和删除元素总是要进行数组复制。

5、Java里多个Map的性能比较

![在这里插入图片描述](https://img-blog.csdnimg.cn/f173a9aa700b40659ee6f1c8201ed4ac.png

  • TreeMap基于红黑树(一种自平衡二叉查找树)实现的,时间复杂度平均能达到O(log n)。
  • HashMap是基于散列表实现的,时间复杂度平均能达到O(1)。
  • ConcurrentSkipListMap是基于跳表实现的,时间复杂度平均能达到O(log n)

(原文链接:https://blog.csdn.net/debugingstudy/article/details/12716327)

6、HashMap夺命14问

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

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

相关文章

React写法——使用js高阶函数实现多条件搜索功能

🙂博主:爱学习的Akali king 🙂本文核心:React写法——使用js高阶函数实现多条件搜索功能 目录 思考一下代码是什么?你如何看待编程语言?用react写法来实现,思路步骤:第一步&#x…

动态规划 DP (三)

4.分割DP 对于分割类型题,动态规划的状态转移方程通常并不依赖相邻的位置,而是依赖于满足分割 条件的位置。 1) 力扣https://leetcode.cn/problems/perfect-squares/举个例子对于8来说,要计算 完全平方数的最少数量 ,…

剑指offer刷题笔记--Num21-30

1--调整数组顺序使奇数位于偶数前面(21) 主要思路: 双指针法,左指针从 0 开始遍历,直到遇到偶数,右指针从 len - 1 开始遍历,直到遇到奇数; 这时左指针指向偶数,右指针指…

kube-proxy源码阅读

kube-proxy源码阅读 通过阅读kube-proxy的源码可以将proxy的主要逻辑总结为下图所示: 首先顺着代码阅读到ProxyServer->Run()函数,这里是kube-proxy启动的主逻辑,启动了两个server,分别是: ...var errCh chan err…

基于深度学习的高精度安全帽背心检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度安全帽背心检测识别系统可用于日常生活中或野外来检测与定位安全帽背心目标,利用深度学习算法可实现图片、视频、摄像头等方式的安全帽背心目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用…

【软考网络管理员】2023年软考网管初级常见知识考点(18)-安全协议SSL与PGP、数据加密技术

涉及知识点 安全套接层协议SSL详解,PGP协议是什么?数据加密技术有哪些?软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于:CSDN博主-《拄杖盲学轻声码》,更多考点…

JUC之LockSupport和中断

文章目录 1 线程中断机制1.1 什么是线程中断机制1.2 三大中断方法1.3 如何中断运行中的线程1.3.1 通过volatile变量实现1.3.1 通过AtomicBoolean实现1.3.1 通过interrupt和isInterrupted api实现 2 LockSupport2.1 为什么会出现LockSupport2.2 两道面试题 参考材料 1 线程中断机…

案例合集 | 创新社会组织服务,打造“数字化商协会”

数字化建设方兴未艾数字化商会势在必行 近年来,国务院、发改委等机构陆续出台了一系列鼓励数字经济与产业数字化发展的规划指南,内容主要涵盖鼓励平台经济建设、促进供应链数字化转型与提升中小企业数字化渗透等方面,顶层政策引导并促进企业…

使用Gradio的BarPlot模块创建交互式柱状图

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

SQL和NoSQL数据库的便捷速查表

在项目成功的过程中选择合适的数据库非常重要。以下是关键要点的总结: •SQL数据库提供结构化数据存储、SQL支持和关系能力。•NoSQL数据库提供灵活性、可扩展性和分布式架构。•专门的数据库,如列存储、图形数据库、空间数据库和时间序列数据库&#xf…

Jetpack compose中实现流畅的Theme选择器动画

Jetpack compose中实现流畅的Theme Picker动画 Jetpack Compose改变了我们在Android上管理主题的方式。它提供了更大的灵活性,使我们能够以更多的方式定义用户界面(UI)。此外,Compose中的动画系统使我们能够轻松创建令人印象深刻和…

如何训练全自动的安卓ai脚本(yolov5 为例) 实现游戏应用自动屏幕识别点击

必要资源 yolo训练方法,调参要点:https://docs.ultralytics.com/ncnn yolov5 示例:https://github.com/nihui/ncnn-android-yolov5在线模型转换:https://convertmodel.com/ 硬件配备 32G 内存, 2060 英伟达显卡 操作步骤 1.准备好数据集&#xff0c…

管理类联考——逻辑——知识篇——形式逻辑——五、联言选言——haimian

联言&选言 考点分析 考点分析 削弱 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量6222111 联言 本质定义 联言命题是断定两种或两种以上事物情况同时存在的命题,用“A并且B”表示,逻辑符号为A ∧ B。 若“A ∧ B”为真…

为什么uCOSii的栈顶不再是0x20000000

我将FreeRTOS的工程文件移植到基于uCOSii系统中,发现两个系统生成的栈顶地址不一样,即使栈的大小相同,都是用Keil编译器,差别很大。见下图: Stack_Size EQU 0x00001000; 以前一直使用FreeRTOS系统&#xff0c…

简单易懂:Vue3框架三天速成(一)

前言:学习Vue框架首先需要具备基本的HTML5、CSS3、JavaScript基础,了解基本概念以及用法再来学习Vue会事半功倍! 一、初识Vue Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。Vue 只关注视图层&a…

【服务器数据恢复】raid5故障导致LUN无法访问的数据恢复案例

服务器数据恢复环境: 一台服务器中有一组由数块SAS硬盘组建的RAID5阵列,阵列中有1块热备盘,上层部署OA以及Oracle数据库。 服务器故障: 该磁盘阵列中有2块硬盘出现故障先后离线,RAID5阵列瘫痪,上层LUN无法…

使用记事本编写第一个GO程序

开发环境: go1.18.3 记事本 先来看一下要编写的第一个hello,world Go程序 package main import "fmt"func main() {/* this is my first Go program*/fmt.Println("hello,world") } 第一行代码 package main定义了域名,你必须在源文…

设计模式->观察者设计模式和订阅者发布者设计模式的区别

设计模式->观察者设计模式和订阅者发布者设计模式的区别 一、先复习一下观察者设计模式的相关定义,优点,以及缺点1.定义观察者模式的三个典型例子 2.优点3.缺点4.观察者设计模式的主要角色5.代码举例完整代码 二、回答问题:观察者设计模式和订阅者发布者设计模式的区别 一、…

【Java-SpringBoot+Vue+MySql】项目开发综合—经验总结

目录 框架: 编程思维: MVC架构: 前端——组件式开发 开发思路梳理: 后端—— 前端—— 效果图 信息列表: 修改用户​编辑 新增用户 删除用户 数据清空 批量上传 框架: 后端:JAVA-SpringBoot2.6、包管理器M…

13.RocketMQ之消息的存储与发送

1. 消息存储 1.1 消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储。 消息生成者发送消息Broker收到消息,将消息进行持久化,在存储中新增一条记录返回ACK给生产者Broker消息给对应的消费者,然后等待消费者返回A…