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

ArrayList vs LinkedList,HashMap vs TreeMap:如何选择最适合的集合类?

精心整理了最新的面试资料和简历模板,有需要的可以自行获取

点击前往百度网盘获取
点击前往夸克网盘获取


在 Java 开发中,集合类的选择直接影响程序的性能和代码的可维护性。不同的数据结构适用于不同的场景,盲目使用可能导致内存浪费、性能下降甚至逻辑错误。本文将从底层原理、时间复杂度、内存占用和典型场景出发,对比分析 ArrayList vs LinkedListHashMap vs TreeMap,帮助你做出合理选择。


一、ArrayList vs LinkedList:线性结构的对决
1. 底层数据结构
  • ArrayList:基于动态数组实现,内存连续分配。
  • LinkedList:基于双向链表实现,节点通过指针连接。
2. 时间复杂度对比
操作ArrayListLinkedList
随机访问(get)O(1)O(n)
头部插入/删除O(n)(需移动元素)O(1)
尾部插入/删除O(1)(均摊时间)O(1)
中间插入/删除O(n)O(n)(需遍历到位置)
3. 内存占用
  • ArrayList:内存紧凑,仅存储数据和容量字段。但可能存在预分配空间(默认扩容为原容量的 1.5 倍)。
  • LinkedList:每个节点需额外存储前驱和后继指针,内存占用约为 ArrayList 的 2 倍。
4. 适用场景
  • 选择 ArrayList
    • 需要频繁随机访问元素(如按索引查询)。
    • 尾部插入/删除操作较多(如栈或队列场景)。
    • 内存敏感,需减少空间碎片。
  • 选择 LinkedList
    • 频繁在头部或中间插入/删除(如实现队列或双向队列)。
    • 无需随机访问,仅需顺序遍历(如迭代器遍历)。
5. 误区与注意事项
  • “LinkedList 插入一定比 ArrayList 快”:实际在中间插入时,LinkedList 需要遍历到目标位置,耗时可能超过 ArrayList 的元素移动。
  • 内存局部性:ArrayList 的连续内存对 CPU 缓存更友好,遍历速度更快。

二、HashMap vs TreeMap:键值对的两种哲学
1. 底层数据结构
  • HashMap:基于哈希表(数组 + 链表/红黑树,Java 8 优化)。
  • TreeMap:基于红黑树(平衡二叉搜索树)。
2. 时间复杂度对比
操作HashMap(平均)TreeMap
插入(put)O(1)O(log n)
查询(get)O(1)O(log n)
范围查询(如子图)不支持O(log n + k)
3. 核心特性
  • HashMap
    • 无序存储,键的哈希值决定位置。
    • 允许 null 键和 null 值。
    • 负载因子(默认 0.75)控制扩容阈值。
  • TreeMap
    • 按键的自然顺序或自定义 Comparator 排序。
    • 支持范围查询(如 subMap()tailMap())。
    • 键不可为 null(依赖比较逻辑)。
4. 适用场景
  • 选择 HashMap
    • 需要快速存取键值对,且不关心顺序。
    • 数据量大且哈希冲突较少(合理设计哈希函数)。
    • 允许 null 键值。
  • 选择 TreeMap
    • 需要按顺序遍历键(如按字母序输出)。
    • 频繁执行范围查询(如查找 10~20 之间的键)。
    • 需自定义排序规则(如按对象属性排序)。
5. 误区与注意事项
  • 哈希冲突:HashMap 在哈希冲突严重时,链表会转为红黑树(Java 8+),但仍需设计良好的哈希函数。
  • 线程安全:二者均非线程安全,多线程场景需用 ConcurrentHashMapCollections.synchronizedMap

三、综合选择策略
  1. 根据操作类型选择

    • 频繁随机访问 → ArrayList
    • 频繁插入删除 → 根据位置选择 LinkedListArrayList
    • 需要排序 → TreeMap
    • 纯键值存取 → HashMap
  2. 根据数据规模选择

    • 小数据量:结构差异对性能影响较小,优先考虑代码可读性。
    • 大数据量:关注时间复杂度,避免线性操作(如 LinkedList 的遍历)。
  3. 通过性能测试验证:理论分析需结合实际场景测试(如 JMH 基准测试)。


四、总结
  • ArrayList:随机访问之王,尾部操作高效,内存友好。
  • LinkedList:头尾插入删除利器,但慎用于遍历和中间操作。
  • HashMap:快速键值存取,无序场景首选。
  • TreeMap:有序键值对的终极选择,支持复杂查询。

最终,选择集合类时需明确需求:是更关注速度、内存,还是功能特性?理解底层原理,结合实际场景,才能写出高效健壮的代码。

相关文章:

ArrayList vs LinkedList,HashMap vs TreeMap:如何选择最适合的集合类?

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 在 Java 开发中,集合类的选择直接影响程序的性能和代码的可维护性。不同的数据结构适用于不同的场景,盲目使用可能导致内存浪费、性能…...

使用Form.List且有Select组件

当在使用Form.List组件,且组件中有Select选项时,针对每一次选择,都要过滤掉那些已经选择过的选项,可能遇到的问题: 直接过滤会将每一个Select中的options选项都过滤掉,无法正常展示选择的选项 解决办法&a…...

大数据学习笔记

文章目录 1. 大数据概述1.1 大数据的特性1.2 大数据技术生态1.2.1 Hadoop 的概念特性1.2.2 Hadoop生态圈 — 核心组件与技术栈1.2.3 Hadoop生态演进趋势 2. 数据处理流程与技术栈2.1 数据采集2.1.1 日志采集工具2.1.2 实时数据流2.1.3 数据迁移 2.2 数据预处理2.2.1 批处理2.2.…...

Obsidian 文件夹体系构建 -INKA

Obsidian 文件夹体系构建 -INKA 本篇文章主要分享一下自己折腾学习实践过的 INKA 框架方法。原地址:Obsidian文件夹体系构建–INKA。 文章目录 Obsidian 文件夹体系构建 -INKA前言INKA简介INKA 理论最佳实践实际应用 反思 前言 上文 Obsidian文件夹体系构建-ACCES…...

QML与C++:基于ListView调用外部模型进行增删改查(性能优化版)

目录 引言相关阅读工程结构数据模型设计DataModel 类ContactProxyModel 类 为什么使用QSortFilterProxyModel?应用初始化与模型连接UI实现 性能分析与优化运行效果扩展思考总结下载链接 引言 在上一篇中介绍了基于ListView调用外部模型进行增删改查,本文…...

集合常用Stream操作

1、中间操作 filter()过滤 将流中的元素筛选出满足条件的元素 List<String> list Arrays.asList("abc","test","demo","frse","fesfes"); list.stream().filter(s -> s.startsWith("f")).forEach(Sy…...

ReactNative中处理安全区域问题

RN原生方案不支持android系统&#xff0c;所以在此使用三方组件react-native-safe-area-context 1、安装插件 yarn add react-native-safe-area-context2、安装完成后直接yarn ios可能会失败&#xff0c;需要先 cd ios && pod install && cd ..出来再继…...

二、The Power of LLM Function Calling

一、Function Calling 的诞生背景 1. 传统LLM的局限性 静态文本生成的不足&#xff1a;早期的LLM&#xff08;如早期版本的ChatGPT&#xff09;主要依赖预训练的知识库生成文本&#xff0c;但无法直接与外部系统或API交互。这意味着它们只能基于历史数据回答问题&#xff0c;…...

贪心算法day10(无重叠区间)

1.无重叠区间 435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 代码&#xff1a; class Solution {public static int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(v1,v2)->{return v1[0]-v2[0];});int left interva…...

reactive 解构赋值给 ref

在 Vue 3 中&#xff0c;当你执行以下操作时&#xff1a; javascript const applyBasicInfo ref(); applyBasicInfo.value { ...props.applyBasicInfo }; 最终的 applyBasicInfo.value 是响应式对象&#xff0c;但与原对象 props.applyBasicInfo 的响应性完全独立&#xf…...

MongoDB简单用法

图片中 MongoDB Compass 中显示了默认的三个数据库&#xff1a; adminconfiglocal 如果在 .env 文件中配置的是&#xff1a; MONGODB_URImongodb://admin:passwordlocalhost:27017/ MONGODB_NAMERAGSAAS&#x1f4a1; 一、为什么 Compass 里没有 RAGSAAS 数据库&#xff1f;…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4): 可能形(かのうけい)

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4): 可能形(かのうけい) 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)~んです  復習(ふくしゅう)(2)いただけませんか 復習(ふくしゅう)(3)可能形(かのうけい)(1)1グループ:(2)2グループ…...

Windows 下 MongoDB ZIP 版本安装指南

在开发和生产环境中&#xff0c;MongoDB 是一种非常流行的 NoSQL 数据库&#xff0c;以其灵活性和高性能而受到开发者的青睐。对于 Windows 用户来说&#xff0c;MongoDB 提供了多种安装方式&#xff0c;其中 ZIP 版本因其灵活性和轻量级的特点&#xff0c;成为很多开发者的首选…...

万字长篇————C语言指针学习汇总

经过一段时间的学习&#xff0c;我们已经接触到了C语言的很多知识了。不过目前我们接下来我们要接触C语言中一个最大的“门槛”&#xff1a;指针。 什么是指针&#xff1f; 在介绍指针之前&#xff0c;我们首先要明白变量与地址之间的关系。 举一个生活中的案例&#xff1a;一…...

day29图像处理OpenCV

文章目录 一、图像预处理6 图像色彩空间转换6.3灰色/BGR/HSV相互转化 7 彩图转灰图方法7.1 最大值法7.2 平均值法7.3 加权均值法7.4 案例 8 图像二值化处理8.1 阈值法(typecv2.THRESH_BINARY)8.2 反阈值法(THRESH_BINARY_INV)8.3 截断阈值法(THRESH_TRUNC)8.4 低阈值零处理(THR…...

Spring Boot 项目三种打印日志的方法详解。Logger,log,logger 解读。

目录 一. 打印日志的常见三种方法&#xff1f; 1.1 手动创建 Logger 对象&#xff08;基于SLF4J API&#xff09; 1.2 使用 Lombok 插件的 Slf4j 注解 1.3 使用 Spring 的 Log 接口&#xff08;使用频率较低&#xff09; 二. 常见的 Logger&#xff0c;logger&#xff0c;…...

KrillinAI:视频跨语言传播的一站式AI解决方案

引言 在全球内容创作领域&#xff0c;跨语言传播一直是内容创作者面临的巨大挑战。传统的视频本地化流程繁琐&#xff0c;涉及多个环节和工具&#xff0c;不仅耗时耗力&#xff0c;还常常面临质量不稳定的问题。随着大语言模型(LLM)技术的迅猛发展&#xff0c;一款名为Krillin…...

PDF处理控件Aspose.PDF指南:使用 C# 从 PDF 文档中删除页面

需要从 PDF 文档中删除特定页面&#xff1f;本快速指南将向您展示如何仅用几行代码删除不需要的页面。无论您是清理报告、跳过空白页&#xff0c;还是在共享前自定义文档&#xff0c;C# 都能让 PDF 操作变得简单高效。学习如何以编程方式从 PDF 文档中选择和删除特定页面&#…...

在 IntelliJ IDEA 中开发 Java Web 项目时,遇到包内明明存在某个类但类名仍然爆红(显示红色错误提示)

在 IntelliJ IDEA 中开发 Java Web 项目时&#xff0c;遇到包内明明存在某个类但类名仍然爆红&#xff08;显示红色错误提示&#xff09;&#xff0c;而项目却能正常运行&#xff0c;重启 IDEA 后问题依旧&#xff0c;这通常是由以下原因及解决方法导致的&#xff1a; 1. 缓存…...

【4】k8s集群管理系列--harbor镜像仓库本地化搭建

一、harbor基本概念 ‌Harbor是一个由VMware开源的企业级Docker镜像仓库解决方案‌&#xff0c;旨在解决企业在容器化应用部署中的痛点&#xff0c;提供镜像存储、管理、安全和分发的全生命周期管理‌。Harbor扩展了Docker Registry&#xff0c;增加了企业级功能&#xff0c;如…...

Active Directory域服务管理与高级应用技术白皮书

目录 一、Active Directory核心架构解析 1.1 AD域服务核心组件 1.2 域功能级别演进 1.3 AD LDS应用场景 二、企业级域环境部署最佳实践 2.1 域控制器部署规划 2.2 高可用架构设计 2.3 客户端入域优化 三、高级域管理技术 3.1 精细化权限管理 3.2 组策略深度配置 3.3…...

OCP中的OCS operator介绍及应用示例

一、OCS operator介绍 在 Red Hat OpenShift Container Platform&#xff08;OCP4.8版之前&#xff0c;包含4.8&#xff09; 中&#xff0c;OCS Operator&#xff08;OpenShift Container Storage Operator&#xff09; 是用于在 OpenShift 集群中部署、配置和管理 OpenShift …...

Linux-服务器添加审计日志功能

#查看audit软件是否在运行(状态为active而且为绿色表示已经在运行) systemctl start auditd #如果没有在运行的话,查看是否被系统禁用 (audit为0表示被禁用) cat /proc/cmdline | grep -w "audit=0" #修改/etc/default/grub里面audit=0 改为audit=1 #更新GRUB…...

ARM Cortex-M中断处理全解析

今天我们聊一聊ARM Cortex-M中断处理。在嵌入式系统中&#xff0c;中断是实现实时响应的核心机制。想象一下&#xff0c;如果没有中断&#xff1a; 按键按下时&#xff0c;系统可能忙于其他任务而错过响应通信数据到来时&#xff0c;可能因为没及时处理而丢失定时任务难以精确…...

douyin_search_tool | 用python开发的抖音关键词搜索采集软件

本软件工具仅限于学术交流使用&#xff0c;严格遵循相关法律法规&#xff0c;符合平台内容合法性&#xff0c;禁止用于任何商业用途&#xff01; 抖音作为国内颇受欢迎的短视频社交平台&#xff0c;汇聚了大量用户群体和活跃用户。分析平台上的热门视频可用于市场调研和竞品分析…...

基于FreeBSD的Unix服务器网络配置

Unix系统版本 FreeBSD-10.1-i386 网络配置 1.配置网络ip及网关 #编辑配置文件 ee /etc/rc.conf #参照如下内容设置 ifconfig_em0”inet 192.168.1.189 netmask 255.255.255.0” defaultrouter”192.168.1.1” #回到命令模式 esc #保存 a a 2.配置dns #编辑配置文件 ee /etc/…...

Margin和Padding在WPF和CSS中的不同

CSS和WPF中 margin 与 padding 在方向上的规定基本一致&#xff0c;但在使用场景和一些细节上有所不同。 CSS - 方向规定&#xff1a; margin 和 padding 属性可以分别指定上、右、下、左四个方向的值。例如 margin:10px 20px 30px 40px; 表示上外边距为10px、右外边距为20…...

JVM 概述

JVM概述 JVM的全为 Java Virtual Machine&#xff0c;但是目前的 JVM 已经不再与任何语言进行深度耦合了&#xff0c;其本质就是运行在计算机上的程序&#xff0c;职责是运行处理 Java 字节码文件。 JVM 功能 解释和运行 JVM 会对字节码文件中的指令&#xff0c;实时的解释为…...

基于django云平台的求职智能分析系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;招聘信息管理系统当然不能排除在外。求职智能分析系统是在实际应用和软件工程的开发原理之上&#xff0c;运用Python语言、爬虫技术以及Dj…...

在 Ubuntu 上通过 Docker 部署 Misskey 服务器

在这篇博客中&#xff0c;我们将探讨如何在 Ubuntu 上通过 Docker 部署 Misskey 服务器。Misskey 是一个开源的社交网络平台&#xff0c;支持丰富的社交功能&#xff0c;适合个人和小型社群使用。而 Docker 则是一个便捷的容器化平台&#xff0c;允许开发者轻松地打包、发布和运…...

Pytorch 第十五回:神经网络编码器——GAN生成对抗网络

Pytorch 第十五回&#xff1a;神经网络编码器——GAN生成对抗网络 本次开启深度学习第十五回&#xff0c;基于Pytorch的神经网络编码器。本回分享的是GAN生成对抗网络。在本回中&#xff0c;通过minist数据集来分享如何建立一个GAN生成对抗网络。接下来给大家分享具体思路。 本…...

gitlab如何查看分支的创建时间

在 GitLab 上查看分支创建时间&#xff0c;常规的界面不会直接显示&#xff0c;但可以通过以下几种方法查到准确时间&#xff1a; 方法一&#xff1a;通过 GitLab Web 界面查看首次提交时间&#xff08;近似&#xff09; 打开你的项目仓库。点击左侧的「Repository&#xff08…...

centos时间不正确解决

检查当前系统时间 date如果时间明显不正确&#xff0c;可以进一步检查硬件时钟&#xff08;BIOS 时间&#xff09;&#xff1a; bash复制代码hwclock --show同步时间&#xff08;推荐方式&#xff09; 为了确保系统时间准确&#xff0c;建议使用 NTP&#xff08;网络时间协议…...

ubuntu启动 Google Chrome 时默认使用中文界面,设置一个永久的启动方式

方法 &#xff1a;通过桌面快捷方式设置 编辑 Chrome 的桌面快捷方式&#xff1a; 找到您的 Google Chrome 快捷方式文件。如果是通过菜单启动&#xff0c;通常会在以下路径找到与 Chrome 相关的 .desktop 文件&#xff1a; sudo vim /usr/share/applications/google-chrome.d…...

opencv腐蚀的操作过程

在腐蚀操作的详细流程中&#xff0c;遍历图像的过程如下&#xff1a; 初始化&#xff1a; 设置一个起始位置&#xff08;通常从图像的左上角开始&#xff09;。 准备好结构元素&#xff08;structuring element&#xff09;&#xff0c;它是一个小的矩阵&#xff0c;大小通常是…...

Docker--Docker镜像原理

docker 是操作系统层的虚拟化&#xff0c;所以 docker 镜像的本质是在模拟操作系统。 联合文件系统&#xff08;UnionFS&#xff09; 联合文件系统&#xff08;UnionFS&#xff09; 是Docker镜像实现分层存储的核心技术&#xff0c;它通过将多个只读层&#xff08;Image Laye…...

HL7消息编辑器的使用手册

REDISANT 提供互联网与物联网开发测试套件 # 互联网与中间件&#xff1a; Redis AssistantZooKeeper AssistantKafka AssistantRocketMQ AssistantRabbitMQ AssistantPulsar AssistantHBase AssistantNoSql AssistantEtcd AssistantGarnet Assistant 工业与物联网&#xff1…...

技术与情感交织的一生 (六)

目录 食色性也 Z 姐 Pizza “修罗场” 之战 大二 下 EP 混乱 危机 撤退 离别 初创 重逢 食色性也 美食、美器、美女。追求美好的事物是人的天性。八部众里&#xff0c;天众界&#xff1a;因修行&#xff0c;有美食而无美女&#xff1b;阿修罗界&#xff1a;因产力…...

AI搜索引擎的局限性

# 揭秘AI搜索引擎的局限性与深度爬取技巧 > 摘要&#xff1a;本文深入分析了基于关键词的AI搜索引擎局限性&#xff0c;探讨了深网内容难以被发现的原因&#xff0c;并提供了一系列实用技巧来提高信息获取的全面性。无论是开发者、研究人员还是普通用户&#xff0c;了解这些…...

IPD项目管理的“黄金三角“在2025年是否需要重构?

——技术革命下的组织进化与实践创新 一、时空背景&#xff1a;IPD黄金三角的底层逻辑与时代挑战 IPD&#xff08;集成产品开发&#xff09;管理体系自1998年引入中国以来&#xff0c;其"黄金三角"——跨职能团队协作、结构化流程体系、决策评审机制——始终是企业…...

Jarpress 开源项目重构公告

项目背景 经过长达三个月的技术攻坚&#xff0c;我们正式宣布完成对九年历史开源项目的全面重构升级&#xff01;原项目基于JFina框架开发&#xff0c;现采用SpringBootMyBatis技术栈重构&#xff0c;正式更名为Jarpress。 架构升级 采用最小组件依赖实现&#xff0c;减少系…...

Redshift 2025.4.1 版本更新:多平台兼容性与功能修复

2025 年 4 月 10 日&#xff0c;Redshift 发布 2025.4.1 版本&#xff08;2025.04&#xff09;&#xff0c;聚焦宿主软件兼容性提升与核心功能修复&#xff0c;具体更新如下&#xff1a; 各平台适配与优化 Maya/3ds Max/Blender&#xff1a;新增对 Maya 2026、3ds Max 2026、…...

使用crxjs插件编写浏览器扩展插件遇到的问题 Waiting for the extension service worker...

目前最新的vitejs/plugin-vue和crxjs/vite-plugin不兼容&#xff0c;在crxjs官网有写 修改插件版本如下&#xff1a; "devDependencies": {"crxjs/vite-plugin": "^1.0.14","vitejs/plugin-vue": "^2.3.4","vite"…...

数据库学习通期末复习一

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…...

数据分析实战案例:使用 Pandas 和 Matplotlib 进行居民用水

原创 IT小本本 IT小本本 2025年04月15日 18:31 北京 本文将使用 Matplotlib 及 Seaborn 进行数据可视化。探索如何清理数据、计算月度用水量并生成有价值的统计图表&#xff0c;以便更好地理解居民的用水情况。 数据处理与清理 读取 Excel 文件 首先&#xff0c;我们使用 pan…...

生态环境影响评价全解析

生态环境影响评价的原则、方法、工作程序、指标选择、参数计算、模型模拟、报告编制 一 &#xff1a;生态环境影响评价的基本程序 生态环境影响评价的涵义、生态影响的类型&#xff1b;生态环境影响评价的原则、流程、等级确定及工作范围。 图1 空间尺度上长江对中华鲟的累积…...

【Netty篇】Netty的线程模型

目录 一、Netty 线程模型是啥&#xff1f;二、Netty 线程模型有啥作用&#xff1f;三、Netty 线程模型解决了什么问题&#xff1f;四、如何使用 Netty 线程模型&#xff1f;五、Netty 线程模型的优缺点&#xff1f;六、总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1…...

PyTorch实现权重衰退:从零实现与简洁实现

一、权重衰退原理 权重衰退&#xff08;L2正则化&#xff09;通过向损失函数添加权重的L2范数惩罚项&#xff0c;防止模型过拟合。其损失函数形式为&#xff1a; 二、从零开始实现 1.1 导入库与数据生成 %matplotlib inline import torch from torch import nn from d2l imp…...

Webflux声明式http客户端:Spring6原生HttpExchange实现,彻底摒弃feign

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

python的strip()函数用法; 字符串切片操作

python的strip()函数用法 目录 python的strip()函数用法代码整体功能概述代码详细解释1. `answer["output_text"]`2. `.strip()`3. `final_answer = ...`字符串切片操作:answer[start_index + len("Helpful Answer:"):].strip()整体功能概述代码详细解释1…...