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

List 与 Set 的区别:

|---------|--------------------------------|--------------------------------------------------------|
| | List | Set |
| 重复 | 允许重复的对象(多个null也可以) | 不允许重复的对象(null也只能有一个) |
| 有序性 | 有序的。 保持了每个元素的插入顺序。即输出顺序就是输入顺序。 | 有序和无序都有。 HashSet:无法保证每个元素的存储顺序。 LinkedHashSet:按插入顺序存放。 |

数组与 ArrayList 的区别:

相同点:

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

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

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

不同点:

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

ArrayList 与 LinkedList 的区别:

相同点:

  1. 都是线程不安全的;

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

不同点:

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

相关推荐
闪电悠米4 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
WL学习笔记4 小时前
堆(数据结构)
数据结构·
wabs6668 小时前
关于图论【卡码网100.最大岛屿的面积的思考】
数据结构·算法·图论
yuannl1010 小时前
图的最短路径Dijkstra
数据结构
zander25811 小时前
138. 随机链表的复制
数据结构·算法·链表
过期动态11 小时前
【LeetCode 热题 100】找到字符串中所有字母异位词
java·数据结构·算法·leetcode·职场和发展·rabbitmq
来一碗刘肉面11 小时前
栈在递归中的应用
数据结构·算法
皓月斯语11 小时前
程序设计语言的特点
开发语言·数据结构·c++
邪修king12 小时前
C++ 进阶终章:异常机制与智能指针全解 —— 从错误处理到 RAII 资源管理,打通现代 C++ 的核心命脉
android·数据结构·c++
Adios79420 小时前
设置交集大小至少为2
数据结构·算法·leetcode