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 接口) | 不支持随机访问。 |
| 插入效率 | 插入效率比较低(需要扩容时效率会变低)。 | 插入效率比较高(删除不一定高)。 |
| 使用场景 | 随机访问的场景。 | 插入很频繁的场景 用作:栈、队列或双向队列 |

相关推荐
CSharp精选营4 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
刘马想放假7 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠8 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦15 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠16 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾16 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres82116 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q16 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒16 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记16 天前
单项不带头不循环链表
数据结构·链表