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

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.kler.cn/a/430673.html

相关文章:

  • cannot import name ‘_C‘ from ‘pytorch3d‘
  • LeetCode:257. 二叉树的所有路径
  • Arduino驱动DS18B20测量环境温度
  • 各种网站(学习资源及其他)
  • 如何查看pad的console输出,以便我们更好的进行调试,查看并了解实际可能的问题。
  • Spring常见面试题总结
  • 【kafka】常用基础命令使用案例
  • ViT学习笔记(三) RepViT和TransNext简介
  • 【定时任务】定时任务技术实现原理和选型分析
  • 分析比对vuex和store模式
  • vue-生命周期
  • 力扣 螺旋矩阵-54
  • vscode 配置C/C++环境控制台参数
  • 【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解
  • 网页核心页面设计(第5章)
  • 给我的小程序加了个丝滑的搜索功能,踩坑表情包长度问题
  • Win11家庭版安装Docker,解决engine stopped问题
  • 初始数据结构
  • 电脑文件夹打不开了,能打开但是会闪退,提示“找不到iUtils.dll”是什么原因?
  • 电脑运行时提示“0x80240037”错误,提示安装ie插件或其他微软程序时,报错提示“未指定的错误”是什么原因?以及要怎么解决和预防?
  • AUTOSAR AP和CP的安全要求规范(Safety Req)详细解读
  • SQL注入--堆叠注入
  • [漏洞挖掘与防护] 05.CVE-2018-12613:phpMyAdmin 4.8.1后台文件包含缺陷复现及防御措施
  • 【Java EE】Spring请求如何传递参数详解
  • Mac电脑钓鱼到拿下核心权限
  • GC常见垃圾回收算法,JVM分代模型