如何根据场景判断是使用ArrayList还是LinkedList?

介绍

本文将以 HashMap 为例,使你了解ArrayList与LinkedList分别适合怎么样的使用场景,以及如何分析一个场景是使用ArrayList还是LinkedList?

HashMap介绍

存储结构

对应到程序中的结构为

java 复制代码
// 数组
transient Node<K,V>[] table;

// 链表节点
static class Node<K,V> implements Map.Entry<K,V> {
    final int hash;
    final K key;
    V value;
    Node<K,V> next;
}

获取元素

分析

  • get: 在使用HashMap时get元素时,首要通过对key的hash取模运算得到对应的Hash桶,再遍历hash桶来获取到元素的对应值。
  • 添加: 1.7 及以前如果找不到元素就在链表的头部添加,1.8 将添加位置换为了尾部
  • (删除、修改就是对读取到的Node进行对应的删改操作,这里就不做过多解释)

HashMap将存储Hash桶的结构设计为Array,将Hash桶结构设计为Link

为什么存储HashMap要这样设计?

现在假设将存储Hash桶的结构改为了链表存储,Hash桶的存储结构改为了数组存储。通过对HashMap的实现结构进行调换,来分析会出现什么样的问题(原来的实现相对有什么优点)。


存储Hash桶的结构换为Link

1. 基于查询分析"首先需要通过对key的hash取模运算得到对应的Hash桶"): 在这一步骤中,我们使用链表存储势必要通过遍历的方式获取到对应下标上的Hash桶,时间复杂度在O(n)。但是,通过ArrayList来获取到对应的Hash桶便可以达到O(1) 的时间复杂度

2. 基于 删除、修改、添加 分析 在删除、修改、添加操作中只有添加可以对存储Hash桶的结构造成影响,具体的影响就是HashMap的扩容。如果通过数组实现那么在扩容需要重新申请内存空间,通过rehash将元素整体迁移,通过链表实现不需要申请新的内存空间,但是依然需要通过rehash将元素整体迁移。

3. 总结 在查询时数组完胜。在删除、修改、添加时,时间消耗的大头是rehash申不申请内存对整体的影响并不大,综合结论得出 存储Hash桶结构为Array时要比Link要优秀


Hash桶结构换为Array

1. 基于查询分析"再遍历hash桶来获取到元素的对应值。") 在这一步骤中,无论是Link还是Array都需要通过对整体进行遍历来完成元素的查找工作,彼此相差不大

2. 基于 删除、修改、添加 分析 在删除、修改、添加时需要频繁的对存储进行修改。如果使用Array就需要预分配好一定长度的空间,不预先分配一定的长度就需要频繁的创建Array来满足对元素的删除、修改、添加,而Link就不需要考虑这里扩容的问题。

3. 总结 查询两者都相差不大,但是在 删除、修改、添加 中Array却需要预分配内存或者是频繁创建,在此场景下:Link要比Array要更加优秀

总结

在ArrayList与LinkedList的对比中基本上可以看作是数组和链表在做对比。希望通过这种对比分析方式能够让你明白如何去分析到底是使用ArrayList还是LinkedList。如果想要了解更多这两个链表的详细信息请跳转至juejin.cn/post/741143...

相关推荐
isfox4 分钟前
一文拆解 Java CAS:从原理到避坑全攻略
java
JPC客栈11 分钟前
LeetCode面试经典 150 题(Java题解)
java·leetcode·面试
HyperAI超神经21 分钟前
【vLLM 学习】Aqlm 示例
java·开发语言·数据库·人工智能·学习·教程·vllm
异常驯兽师21 分钟前
IntelliJ IDEA 项目导入后 Java 文件图标显示为红色小写 j 的解决方法
java·路径配置
纪元A梦24 分钟前
华为OD机试真题——数据分类(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
java·javascript·c++·python·华为od·go·华为od机试题
常年游走在bug的边缘34 分钟前
基于spring boot 集成 deepseek 流式输出 的vue3使用指南
java·spring boot·后端·ai
廖广杰1 小时前
java虚拟机-为何元空间取代永久代
后端
熙客1 小时前
Java并发:线程池
java
李菠菜1 小时前
配置 MySQL 8 允许 Root 用户远程访问
后端·mysql
稀土君1 小时前
🔥 万「友」引力计划上线啦,轻松做任务赢积分“拿”华为MatePad Air、雷蛇机械键盘、 热门APP会员卡...
前端·人工智能·后端