集合框框框地架

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

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

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 要快。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LAMDA面试准备(2024-05-23)

有没有学习过机器学习,提问了 FP-Growth 相比 Apriori 的优点 1. 更高的效率和更少的计算量(时间) FP-Growth 通过构建和遍历 FP-树 (Frequent Pattern Tree) 来挖掘频繁项集,而不需要像 Apriori 那样生成和测试大量的候选项集。具…

这种电脑原来这么耗电……震惊了粉丝小姐姐

前言 在今年1月份的时候,一位来自重庆的小姐姐加了小白,咨询电脑的问题: 哦豁,这个电脑看着确实闪闪发光,是真的很漂亮~(嗯,小姐姐也很漂亮) 电脑无法开机,按…

Vue从入门到实战Day12

一、Pinia快速入门 1. 什么是Pinia Pinia是Vue的最新状态管理工具,是Vuex的替代品 1. 提供更加简单的API(去掉了mutation) 2. 提供符合组合式风格的API(和Vue3新语法统一) 3. 去掉了modules的概念,每一…

LiveGBS流媒体平台GB/T28181用户手册-用户管理:添加用户、编辑、关联通道、搜索、重置密码

LiveGBS流媒体平台GB/T28181用户手册-用户管理:添加用户、编辑、关联通道、搜索、重置密码 1、用户管理1.1、添加用户1.2、编辑用户1.3、关联通道1.4、重置密码1.5、搜索1.6、删除 2、搭建GB28181视频直播平台 1、用户管理 1.1、添加用户 添加用户,可以配置登陆用户…

自动驾驶---Tesla的自动驾驶技术进化史(PerceptionPlanning)

1 前言 笔者在专栏《自动驾驶Planning模块》中已经详细讲解了传统自动驾驶Planning模块的内容:包括行车的Behavior Planning和Motion Planning,以及低速记忆泊车的Planning(最开始有15篇,目前逐渐更新到17篇)。读者对整…

linux:信号深入理解

文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…

SSRF攻击技术

1、SSRF形成原因 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系…

人类交互2 听觉处理和语言中枢

人类听觉概述 人类听觉是指通过耳朵接收声音并将其转化为神经信号,从而使我们能够感知和理解声音信息的能力。听觉是人类五种感觉之一,对我们的日常生活和交流至关重要。 听觉是人类交流和沟通的重要工具。通过听觉,我们能够听到他人的语言…

inventor 2021 Inventor 无法访问您的许可。网络许可不可用 也会出现在其他软件上

错误提示一般如下图 Inventor 无法访问您的许可。 无法访问您的许可 最常见的原因有: 未连接到 Internet许可服务器不工作许可服务器找不到有效许可 您可以执行以下操作: 检查是否连接到 Intemnet停止/重新启动许可服务器 如需进一步帮助,您可以: -与 CAD或IT管理…

2:硬件产品经理面试

流程: 市场评估: 组织立项:项目的交付时问,项目资金预算,项目组成员的确定及责任划分,开发和测试。 名种设计:外观材质的工业设计,硬件的架构设计,软件的功能设计&#x…

Go源码--sync库(1)sync.Once和

简介 这篇主要介绍 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顾名思义 只执行一次 废话不说 我们看源码 英文介绍直接略过了 感兴趣的建议读一读 获益匪浅 其结构体如下 Once 是一个严格只执行一次的object type Once struct {// 建议看下源码的注解&#xf…

(Askchat.ai、360智脑、鱼聪明、天工AI、DeepSeek)

目录 1、Askchat.ai - 梦想为蓝图,ChatGPT为笔。 2、360智脑 — 以人为本,安全可信 3、鱼聪明AI - 做您强大的AI助手 (yucongming.com) 4、天工AI-搜索、对话、写作、文档分析、画画、做PPT的全能AI助手 (tiangong.cn) 5、DeepSeek | 深度求索 1、Askch…

字符函数:分类函数与转换函数

字符函数 一.字符分类函数二.字符转换函数 在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语⾔标准库中提供了一系列库函数,接下来我们就学习⼀下这些函数。 一.字符分类函数 C语言中有⼀系列的函数是专门…

allegro 无法删除Xnet

allegro 无法删除Xnet Orcad中打开Constraint Manager之后,再生成网表,导入PCB后就会出现一堆Xnet网络。无法去除Xnet。 解决办法 在原理图ORCAD中, 1、打开Edit Object properties 2、选择Filter by:Capture 3、点击New Property 4、设置…

头歌openGauss-存储过程第2关:修改存储过程

任务描述 本关任务&#xff1a; 修改存储过程pro0101&#xff0c;并调用&#xff1b; --修改sel_course表中成绩<60的记录为成绩10&#xff0c;然后将计算机学院所有学生的选课成绩输出&#xff1b; --a、需要先删除存储过程pro0101&#xff1b; drop procedure if exists p…

第七节 ConfigurationClassParser 源码分析

tips&#xff1a; ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解&#xff0c;有难度和深度&#xff0c;也枯燥乏味&#xff0c;可以根据实际情况选择阅读。 位置&#xff1a;org.springframework.context.annotation.ConfigurationClassPars…

景源畅信:小白做抖音运营难吗?

在数字化时代&#xff0c;社交媒体已成为人们生活的一部分&#xff0c;而抖音作为其中的翘楚&#xff0c;吸引了众多希望通过平台实现自我价值和商业目标的用户。对于刚入门的小白来说&#xff0c;运营抖音账号可能会遇到不少挑战。接下来&#xff0c;我们将详细探讨这一话题&a…

由于找不到mfc140u.dll怎么办,介绍5种靠谱有效的解决方法

当您的电脑显示“mfc140u.dll丢失”的错误时&#xff0c;通常是因为系统中缺少了某个必要的动态链接库文件。这个问题可能会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。下面我将详细介绍解决该问题的五种方法。 一&#xff0c;关于mfc140u.dll文件的概述 mfc14…

数据防泄漏系统哪个好用,给文件加密的软件

数据防泄露&#xff08;Data Leakage Prevention&#xff0c;DLP&#xff09;是指通过一定的技术手段&#xff0c;防止组织指定&#xff08;重要或敏感的&#xff09;数据或信息资产以违反安全策略规定的形式流出组织的一种策略。 信息防泄露以文档加密技术为核心&#xff0c;…

【代码随想录 二叉树】二叉树前序、中序、后序遍历的迭代遍历

文章目录 1. 二叉树前序遍历&#xff08;迭代法&#xff09;2. 二叉树后序遍历&#xff08;迭代法&#xff09;3. 二叉树中序遍历&#xff08;迭代法&#xff09; 1. 二叉树前序遍历&#xff08;迭代法&#xff09; 题目连接 &#x1f34e;因为处理顺序和访问顺序是一致的。所…