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

List与Set、数组与ArrayList、ArrayList与LinkedList的区别

List 与 Set 的区别:

ListSet
重复允许重复的对象(多个null也可以)不允许重复的对象(null也只能有一个)
有序性有序的。 保持了每个元素的插入顺序。即输出顺序就是输入顺序。

有序和无序都有。

HashSet:无法保证每个元素的存储顺序。 LinkedHashSet:按插入顺序存放。

数组与 ArrayList 的区别:

相同点:

        1. 都具有索引(index):可以通过 index 来直接获取和修改任意项;

        2. 它们所创建的对象都放在堆中;

        3. 都能够对自身进行枚举(因为都实现了 IEnumerable 接口);

不同点:

数组(Array)ArrayList
数据类型可以是基本类型或对象类型。只能是对象类型。
大小大小是固定的,Array对象的初始化必须指定大小大小是动态的
数据存放连续存放(在内存中,数组的元素是按照顺序依次存储在一块连续的内存空间中的。这种连续存储的方式使得数组在随机访问时效率很高,因为可以通过计算偏移量直接定位到元素的内存位置。例如,对于一个int类型的数组,每个元素占用 4 个字节,如果知道数组的起始地址和元素的索引,就可以通过简单的乘法和加法运算来计算出元素的内存地址。)对象的引用是连续的,但对象本身在内存中的位置不一定连续。(ArrayList 内部维护的是一个对象引用数组,这些引用在内存中是连续存放的。但是,这些引用所指向的实际对象(如String对象或其他自定义对象)本身在内存中的位置是由 Java 虚拟机的内存管理系统根据内存的使用情况动态分配的,不一定是连续的。这种存储方式在插入和删除元素时相对灵活,但在一定程度上可能会影响访问效率。
插入与删除不能够添加和删除其中的项可以在任意位置插入和删除项。

访问

效率

ArrayList 与 LinkedList 的区别:

相同点:

        1. 都是线程不安全的;

        2. 都是按照存入的顺序取出;

不同点:

ArrayListLinkedList
实现方式基于数组。基于链表。
随机访问支持随机访问。(实现了RandomAccess 接口)不支持随机访问。
插入效率插入效率比较低(需要扩容时效率会变低)。插入效率比较高(删除不一定高)。
使用场景随机访问的场景。插入很频繁的场景 用作:栈、队列或双向队列
http://www.lryc.cn/news/500982.html

相关文章:

  • 如何在 Odoo18 视图中添加关联数据看板按钮 | 免费开源ERP实施诀窍
  • Linux下mysql环境的搭建
  • 视觉语言模型 Qwen2-VL
  • 浅谈新能源汽车感应钥匙一键启动的步骤和特点
  • 鸿蒙ArkTS语言基础语法详解
  • H5游戏出海如何获得更多增长机会?
  • Cmake+基础命令
  • python数据分析之爬虫基础:requests详解
  • PHP期末复习(通过30道填空题梳理知识点)
  • PostgreSQL 安装部署系列:使用YUM 方式在Centos 7.9 安装指定 PostgreSQL -15版本数据库
  • 知识图谱8:深度学习各种小模型
  • 为什么 JavaScript 中的 `new` 运算符报错?
  • Tomcat,javaweb, servlet , springBoot
  • 使用Kimi开发自己的问答应用
  • TypeScript进阶
  • jenkins邮件的配置详解
  • 小皮面板(PHPSTUDY)配置多个域名或IP
  • 【大语言模型】LangChain LCEL 表达式语言
  • Leetcode 3382. Maximum Area Rectangle With Point Constraints II
  • MitelMiCollab 身份绕过导致任意文件读取漏洞复现(CVE-2024-41713)
  • DVWA 靶场 SQL 注入报错 Illegal mix of collations for operation ‘UNION‘ 的解决方案
  • 京准电钟分享:医院网络内NTP时间同步服务器作用是什么?
  • HTML DOM API
  • java时间处理SimpleDateFormat详解
  • redis-stack redisSearch环境安装搭建
  • go返回多个errors
  • Monkey结合appium模拟操作特定界面
  • Ubuntu22.04深度学习环境安装【cuda+cudnn】
  • go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库
  • 从零用java实现 小红书 springboot vue uniapp (1)