java容器 LIst、set、Map

Java容器中的List、Set、Map是核心数据结构,各自适用于不同的场景

一、List(有序、可重复)

List接口代表有序集合,允许元素重复和通过索引访问,主要实现类包括:

ArrayList

底层结构:动态数组实现。
特点:支持快速随机访问(时间复杂度O(1)),但插入/删除元素时需要移动数组,效率较低(时间复杂度O(n))。
适用场景:读多写少,需频繁按索引查询的场景,如数据缓存。

LinkedList

底层结构:双向链表实现。
特点:插入/删除效率高(时间复杂度O(1)),但随机访问效率低(需遍历链表,时间复杂度O(n))。
扩展功能:可用作栈(push/pop)或队列(offer/poll)。

Vector & Stack

线程安全:通过synchronized实现同步,但性能较低,已被CopyOnWriteArrayList取代。
Stack:基于数组的栈结构,但官方推荐用Deque接口替代。

CopyOnWriteArrayList

并发安全:写操作时复制新数组,读操作无锁,适合读多写少的高并发场景。
缺点:内存占用高,数据可能延迟更新。

二、Set(无序、不可重复)

Set接口要求元素唯一性,主要实现类包括:

HashSet

底层结构:基于HashMap实现,哈希表存储元素。
特点:插入/查询效率高(时间复杂度O(1)),元素无序。

LinkedHashSet

扩展特性:维护插入顺序的双向链表,适合需要保持顺序的集合。

TreeSet

底层结构:基于红黑树实现,元素按自然顺序或自定义比较器排序。
特点:插入/查询效率较低(时间复杂度O(log n)),但支持范围查询。

CopyOnWriteArraySet

并发安全:基于CopyOnWriteArrayList,通过addIfAbsent保证元素唯一性。

三、Map(键值对存储)

Map接口存储键值对(Key-Value),键唯一,主要实现类包括:

HashMap

底层结构:数组+链表/红黑树(JDK8优化冲突处理)。
特点:非线程安全,允许null键/值,查询效率高(平均O(1))。

LinkedHashMap

扩展特性:维护插入顺序或LRU(最近最少使用)顺序。

TreeMap

底层结构:红黑树实现,键按自然顺序或自定义排序。
适用场景:需有序遍历键的场景,如排序字典。

ConcurrentHashMap

并发优化:JDK8后采用CAS和分段锁,替代Hashtable。
特点:高并发下性能优于同步容器,适合多线程环境。

HashTable

遗留类:全表锁导致性能低,不推荐使用

四、场景应用

容器有序性重复性线程安全典型应用场景
ArrayList是(插入顺序)允许否(需并发容器)高频随机访问的静态数据
LinkedList是(插入顺序)允许频繁插入/删除的队列或栈
HashSet禁止否(需并发容器)快速去重的无序集合
TreeSet是(自然排序)禁止需要排序或范围查询的集合
HashMap键唯一否(需ConcurrentHashMap)高频键值查询的非同步场景
ConcurrentHashMap键唯一是(分段锁/CAS)高并发键值存储

五、设计模式与底层原理

迭代器模式:所有容器均实现Iterable接口,通过Iterator遍历元素,支持forEach循环。
适配器模式:如Arrays.asList()将数组适配为List。
写时复制:CopyOnWriteArrayList通过复制新数组实现并发安全,减少锁竞争。

实际使用根据业务场景决定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28299.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不用写代码,批量下载今日头条文章导出excel和pdf

前几天有人问我怎么批量抓取今日头条某个号的所有文章数据,需要文章链接,标题和时间,但是不会写代码,于是我写了个简单的教程 这里以渤海小吏为例 首先用edge浏览器安装web-scraper浏览器扩展 然后打开浏览器控制台,找…

FakeApp 技术浅析(二):生成对抗网络

生成对抗网络(Generative Adversarial Networks,简称 GANs)是 FakeApp 等深度伪造(deepfake)应用的核心技术。GANs 由 生成器(Generator) 和 判别器(Discriminator) 两个…

DeepSeek本地接口调用(Ollama)

前言 上篇博文,我们通过Ollama搭建了本地的DeepSeek模型,本文主要是方便开发人员,如何通过代码或工具,通过API接口调用本地deepSeek模型 前文:DeepSeek-R1本地搭建_deepseek 本地部署-CSDN博客 注:本文不仅…

JavaWeb后端基础(4)

这一篇就开始是做一个项目了,在项目里学习,我主要记录在学习过程中遇到的问题,以及一些知识点 Restful风格 一种软件架构风格 在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。 GET : 查询 …

deepseek本地部署:deepseek-r1-distill-llama-70b应用实践

DeepSeek本地部署之deepseek-r1-distill-llama-70b 本地部署与 AI 应用实践 近年来,大型语言模型(LLM)的快速发展为企业数字化带来了前所未有的机遇。然而,中小企业在使用诸如 GPT-4 这类云端大模型服务时,往往面临数…

8. Pandas : Matplotlib 的使用方法

一 Matplotlib 介绍 Matplotlib 原本是为静态图表设计的,因而没有提供 Web 页面上的交互式体验。Plotly 是专为 Web 设计的。(第9节) 支持 2D 和部分 3D 绘图。涵盖折线图、散点图、热力图、3D 图等 20 余种图表。 二 导入库 import matplotl…

医疗AR眼镜:FPC如何赋能科技医疗的未来之眼?【新立电子】

随着科技的飞速发展,增强现实(AR)技术在医疗领域的应用逐渐成为焦点。医疗AR眼镜作为一种前沿的智能设备,正在为医疗行业带来深刻的变革。它不仅能够提升医生的工作效率,还能改善患者的就医体验,成为医疗科…

pyside6学习专栏(九):在PySide6中使用PySide6.QtCharts绘制6种不同的图表的示例代码

PySide6的QtCharts类支持绘制各种型状的图表,如面积区域图、饼状图、折线图、直方图、线条曲线图、离散点图等,下面的代码是采用示例数据绘制这6种图表的示例代码,并可实现动画显示效果,实际使用时参照代码中示例数据的格式将实际数据替换即可…

C/C++中函数指针和指针函数的原理和区别是什么,分别通过用例说明。

文章目录 函数指针和指针函数的区别函数指针指针函数区别 总结 函数指针和指针函数的区别 在C/C中,函数指针和指针函数是两个不同的概念,它们的用途和定义方式也有所不同。 函数指针 定义: 函数指针是一个指向函数的指针,它存储…

获取哔站评论

一、文章立论 哔哩哔哩(B站)是当前年轻人十分喜爱的视频分享平台,以其丰富多样的内容、互动性强的社区氛围以及独特的弹幕文化深受用户喜爱。在该平台上,用户不仅可以观看各种类型的视频,如动画、游戏、科技、生活、影…

MySQL-表

存储在表中的数据是一种类型的数据,不同类型的数据应放到不同的表中,否则会使以后的检索和访问很困难。数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的, 这表示数据库中没有其他表具有相同的名字。表由一个或多个列组…

【UCB CS 61B SP24】Lecture 21: Data Structures 5: Priority Queues and Heaps 学习笔记

本文介绍了优先队列与堆,分析了最小堆的插入与删除过程,并用 Java 实现了一个通用类型的最小堆。 1. 优先队列 1.1 介绍 优先队列是一种抽象数据类型,其元素按照优先级顺序被处理。不同于普通队列的先进先出(FIFO)&…

DeepSeek-R2:AI大模型新纪元的破晓之光

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列十五DeepSeek大模型技术系列十五》DeepS…

UniApp+Vue3实现高性能无限滚动卡片组件:垂直滑动、触摸拖拽与动态导航的完美结合

引言 在移动应用开发中,流畅且吸引人的用户界面对于提升用户体验至关重要。本文将详细介绍如何使用UniApp和Vue3框架构建一个具有垂直方向无限滚动卡片、触摸拖拽支持、同步导航栏和平滑动画效果的高级UI组件。我们将通过代码分析每个功能的实现细节,帮助…

LeetCode 热题 100----1.两数之和

LeetCode 热题 100----1.两数之和 题目描述 我的解法 语言:js 思路就是:用双重循环去找哪两个数字相加等于target,目前的时间复杂度为O(n2),之后右优化思路再更新。

华为云 | 快速搭建DeepSeek推理系统

DeepSeek(深度求索)作为一款国产AI大模型,凭借其高性能、低成本和多模态融合能力,在人工智能领域崛起,并在多个行业中展现出广泛的应用潜力。 如上所示,在华为云解决方案实践中,华为云提供的快速…

本地部署阿里万象2.1文生视频模型(Wan2.1-T2V)完全指南

在生成式AI技术爆发式发展的今天,阿里云开源的万象2.1(Wan2.1)视频生成模型,为创作者提供了从文字/图像到高清视频的一站式解决方案。本文针对消费级显卡用户,以RTX 4060 Ti 16G为例,详解本地部署全流程与性能调优方案,涵盖环境配置、多模型选择策略、显存优化技巧及实战…

FPGA标准库-Open Logic

在现代技术发展的浪潮中,开源项目已经成为了推动技术创新和发展的核心力量。无论是人工智能、区块链、云计算,还是传统的嵌入式开发、操作系统,开源项目都在其中扮演着至关重要的角色。它们不仅促进了技术的快速迭代,也为全球开发…

React antd的datePicker自定义,封装成组件

一、antd的datePicker自定义 需求:用户需要为日期选择器的每个日期单元格添加一个Tooltip,当鼠标悬停时显示日期、可兑换流量余额和本公会可兑流量。这些数据需要从接口获取。我需要结合之前的代码,确保Tooltip正确显示,并且数据…

【算法题解答·一】二分法

【算法题解答一】二分法 接上文 【算法方法总结一】二分法的一些技巧和注意事项 二分法相关题目如下: 34.在排序数组中查找元素第一和最后一个位置 使用 左闭右闭,[left,right]关键在于 nums[mid] target 的部分找 第一个 target 的过程中&#xff0…