集合框框框地架

这一次来介绍一下常用的集合:

首先是两种集合的《家庭系谱图》:

image-20240524223628645

在这里插入图片描述

接下来介绍一下集合的种类:

Collection

Set

  1. SetTreeSet:基于红⿊树实现,⽀持有序性操作,例如:根据⼀个范围查找元素的操作。但是查找效率不如HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。

  2. HashSet:基于哈希表实现,⽀持快速查找,但不⽀持有序性操作。并且失去了元素的插⼊顺序信息,也就是说使⽤ Iterator 遍历 HashSet 得到的结果是不确定的。

  3. LinkedHashSet:具有 HashSet 的查找效率,且内部使⽤双向链表维护元素的插⼊顺序。

List

  1. ArrayList:基于动态数组实现,⽀持随机访问。

  2. Vector:和 ArrayList 类似,但它是线程安全的。

  3. LinkedList:基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插⼊和删除元素。不仅如此,LinkedList 还可以⽤作栈、队列和双向队列。

Queue

  1. LinkedList:可以⽤它来实现双向队列。

  2. PriorityQueue:基于堆结构实现,可以⽤它来实现优先队列。

Map

  1. TreeMap:基于红⿊树实现。

  2. HashMap:基于哈希表实现。

  3. HashTable:和 HashMap 类似,但它是线程安全的,这意味着同⼀时刻多个线程可以同时写入并且不会导致数据不⼀致。它是遗留类,不应该去使⽤它。现在可以使⽤ ConcurrentHashMap 来⽀持线程安全,并且 ConcurrentHashMap 的效率会更⾼,因为 ConcurrentHashMap 引⼊了分段锁。

  4. LinkedHashMap:使⽤双向链表来维护元素的顺序,顺序为插⼊顺序或者最近最少使⽤(LRU)顺序。

三种常用的集合有什么区别呢?

  1. List

    有序集合:List中的元素有序,即元素按照添加的顺序排列。 允许重复:List可以包含重复的元素。
    实现类:常见的实现类有ArrayList、LinkedList和Vector等。 常用操作:支持通过索引来访问元素,例如get(int index)。 用途:适用于需要元素有序或需要经常通过索引访问元素的场景。

  2. Set

    无序集合:Set中的元素无序,元素的顺序可能会在每次插入或删除操作后发生变化。
    不允许重复:Set不允许包含重复的元素,每个元素都是唯一的。
    实现类:常见的实现类有HashSet、TreeSet和LinkedHashSet等。
    常用操作:主要提供添加、删除和检查元素是否存在的操作。 用途:适用于需要确保元素唯一性的场景,例如去重、集合操作等。

  3. Map

    键值对集合:Map存储键值对(key-value pairs),每个键映射到一个值。 键的唯一性:Map中的键是唯一的,但值可以重复。
    实现类:常见的实现类有HashMap、TreeMap和LinkedHashMap等。
    常用操作:通过键来访问、添加或删除对应的值,例如get(Object key)、put(K key, V value)。
    用途:适用于需要根据键来快速查找、更新或删除值的场景,例如数据库索引、缓存等。

总结:List适用于需要元素有序或索引访问的场景;Set适用于需要元素唯一且无序的场景;Map适用于需要通过键来存储和访问值的场景。

下来是常用的集合中ArrayList 和LinkedList的一些辨别

ArrayList 和LinkedList的区别?

ArrayList:底层是基于数组实现的,查找快,增删较慢;

LinkedList:底层是基于链表实现的。确切的说是循环双向链表(JDK1.6 之前是双向循环链表、JDK1.7 之后取消了循环),查找慢、增删快。LinkedList 链表由⼀系列表项连接⽽成,⼀个表项包含 3 个部分:元素内容、前驱表和后驱表。链表内部有⼀个 header 表项,既是链表的开始也是链表的结尾。header 的后继表项是链表中的第⼀个元素,header 的前驱表项是链表中的最后⼀个元素。

ArrayList 的增删未必就是⽐ LinkedList 要慢:

  1. 如果增删都是在末尾来操作【每次调⽤的都是 remove() 和 add()】,此时 ArrayList 就不需要移动和复制数组来进⾏操作了。如果数据量有百万级的时,速度是会⽐ LinkedList 要快的。

就不需要移动和复制数组来进⾏操作了。如果数据量有百万级的时,速度是会⽐ LinkedList 要快的。

  1. 如果删除操作的位置是在中间。由于 LinkedList 的消耗主要是在遍历上,ArrayList 的消耗主要是在移动和复制上(底层调⽤的是 arrayCopy() ⽅法,是 native ⽅法)。LinkedList 的遍历速度是要慢于
    ArrayList 的复制移动速度的如果数据量有百万级的时,还是 ArrayList 要快。

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

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

相关文章

Unity实现TableView

基于Scrollview封装的TableView,实现对视野外的Cell回收利用,减少创建Cell的开销。 核心逻辑如下: /***************************************动态使用cell核心逻辑开始 **************************************///计算所有cell的坐标信息 …

利用java8 的 CompletableFuture 优化 Flink 程序,性能提升 50%

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

AI图书推荐:用100个ChatGPT提示词掌握Python编程

《用100个ChatGPT提示词掌握Python编程》(ChatGPT:Your Python Coach Mastering the Essentials in 100 Prompts) 塞尔吉奥罗哈斯-加莱亚诺(Sergio Rojas-Galeano)是一位热情的计算机科学家,对人工智能、机器学习、进化…

C++中获取int最大与最小值(补)

上文中,我们学习了C中获取int最大与最小值的两种方法:C库和移位运算,这篇文章将解决在移位运算中遇到的各种报错,并提出一种新的生成int最值的方法 上文链接:http://t.csdnimg.cn/cn7Ad 移位运算取最值常见报错 Dev…

汇编语言(STC89C52)

指令是计算机计算CPU根据人的意图来执行某种操作的命令。一台计算机所执行的全部指令的集合,称为这个CPU的指令系统。而想要使计算机按照人们的要求完成一项工作,就必须让CPU按顺序执行预设的操作,即逐条执行人们编写的指令。这种按照人民要求…

C++ 写的_string类,兼容std::string, MFC CString和 C# 的string

代码例子: using namespace lf; int main() { CString s1 _t("http://www.csdn.net"); _string s2 s1; CString s3 s2; _pcn(s1); _pcn(s2); _pcn(s3); return 0; } 输出: _Str.h /***************************************…

网创教程:WordPress插件网创自动采集并发布

网创教程:WordPress插件网创自动采集并发布 使用插件注意事项: 如果遇到404错误,请先检查并调整网站的伪静态设置,这是最常见的问题。需要定制化服务,请随时联系我。 本次更新内容 我们进行了多项更新和优化&#x…

深入解析kube-scheduler的算法自定义插件

目录 ​编辑 一、问题引入 二、自定义步骤 三、最佳实践考虑 一、问题引入 当涉及到 Kubernetes 集群的调度和资源分配时,kube-scheduler 是一个关键组件。kube-scheduler 负责根据集群的调度策略,将 Pod 分配到适当的节点上。kube-scheduler 默认使…

pyqt6入门案例

效果预览 hello.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Dialog</class><widget class"QDialog" name"Dialog"><property name"geometry"><…

android studio接入facebook踩坑1

今天在接入facebook第三方登录的时候&#xff0c;点击登录按钮&#xff0c;APP闪退&#xff0c;并报错 java.lang.RuntimeException Failure delivering result ResultInfo{whonull,request64206,result-1} 新文章链接https://lengmo714.top/facebook1.html 如下图&#xff1a;…

html多节点生成图片并导出zip包

html多节点生成图片并导出zip包 背景 在做项目时遇到一个要将html节点展示的图片列表统一导出为zip包的需求。 难点 将html节点生成图片将多张图片加入zip包中&#xff0c;然后下载 解决html生成图片问题 参考html截图的思路使用 pnpm add html-to-image如何将图片资源生成z…

鸿蒙OS开发:【一次开发,多端部署】(多设备自适应能力)简单介绍

多设备自适应能力 介绍 本示例是《一次开发&#xff0c;多端部署》的配套示例代码&#xff0c;展示了[页面开发的一多能力]&#xff0c;包括自适应布局、响应式布局、典型布局场景以及资源文件使用。 名称简介 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhe…

数据可视化技术头歌测试合集

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰 目录 时间趋势可视化-柱形图 第1关&#xff1a;“大胃王”比赛数据柱形图绘制——绘制柱形图的基本步骤 任务描述 相关知识 观察和处理数据 绘…

Linux中gcc/g++的基本使用

目录 gcc/g的使用gcc/g是如何生成可执行文件的预处理编译汇编链接 库.o文件是如何与库链接的&#xff1f; debug版本和release版本 gcc/g的使用 在windows中&#xff0c;我们在VS中编写好了代码之后就可以直接在VS中对源码进行编译等操作后运行 而在Linux下&#xff0c;我们可…

LeetCode 279 —— 完全平方数

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此图利用动态规划进行求解&#xff0c;首先&#xff0c;我们求出小于 n n n 的所有完全平方数&#xff0c;存放在数组 squareNums 中。 定义 dp[n] 为和为 n n n 的完全平方数的最小数量&#xff0c;那么有状态…

vue 展示svg矢量图可缩放拖动

使用插件&#xff1a;svg-pan-zoom <template> <!-- svg图--><div id"svgContainer"></div> </template><script> import svgPanZoom from svg-pan-zoom import svgFile from ../datav/img/220kVscb.svg // 路径根据实际情况调…

计算机组成结构—中断和异常

一、基本概念和分类 计算机在执行程序的过程中&#xff0c;有时会遇到一些异常情况或者特殊请求&#xff1b;这时就需要计算机暂停正在运行的程序&#xff0c;转而先去处理这些异常或特殊请求&#xff0c;处理结束之后再返回程序的断点处继续执行。这种处理方式就被称为 “中断…

顶坚北斗有源终端有什么功能跟用途

顶坚北斗有源终端作为现代卫星导航与通信技术融合的杰出代表&#xff0c;其用途广泛且功能强大。在广袤无垠的偏远山区、深邃的海洋以及荒芜的沙漠中&#xff0c;当用户面临移动通信信号无法覆盖的困境时&#xff0c;北斗有源终端便成为了连接世界的桥梁。 该终端的核心功能之一…

PE文件(六)新增节-添加代码作业

一.手动新增节添加代码 1.当预备条件都满足&#xff0c;节表结尾没有相关数据时&#xff1a; 现在我们将ipmsg.exe用winhex打开&#xff0c;在节的最后新增一个节用于存放我们要增加的数据 注意&#xff1a;飞鸽的文件对齐和内存对齐是一致的 先判断节表末尾到第一个节之间…

奥德彪的幸福VS码农的幸福

奥德彪的幸福 非洲国家布隆迪是一个全球最不发达国家之一&#xff0c;大部分居民以农业为生&#xff0c;其中包括香蕉&#xff0c;人们拿香蕉用来做饭也用来酿酒。 香蕉产地距离布隆迪首都布琼布拉很远&#xff0c;而这个国家又缺乏规模化的物流企业&#xff0c;于是就诞生了…